Page 1 of 1
another str_replace problem
Posted: Tue Jun 04, 2002 5:32 pm
by vio
Code: Select all
<?php
$img_dir = "http://www.neo-net.org/~test1/images/smileys";
// $string is whatever text you want to replace =) with the image is
$string = str_replace(' :) ',"<img src="$img_dir/smile.gif">", $string);
$string = str_replace(' :( ',"<img src="$img_dir/frown.gif">", $string);
$string = str_replace(' ;) ',"<img src="$img_dir/wink.gif">", $string);
$string = str_replace(' :P ',"<img src="$img_dir/tongue.gif">", $string);
$string = str_replace(' :D ',"<img src="$img_dir/bigsmile.gif">", $string);
$string = str_replace(' :ї ',"<img src="$img_dir/mad.gif">", $string);
$string = str_replace(' ^_^ ',"<img src="$img_dir/yay.gif">", $string);
$string = str_replace(' -.- ',"<img src="$img_dir/ugh.gif">", $string);
$string = str_replace(' x_X ',"<img src="$img_dir/xed.gif">", $string);
$string = str_replace(' ~_~ ',"<img src="$img_dir/bah.gif">", $string);
$string = str_replace(' :* ',"<img src="$img_dir/flirt.gif">", $string);
$string = str_replace(' ;( ',"<img src="$img_dir/sigh.gif">", $string);
$string = str_replace(' -_- ',"<img src="$img_dir/annoyed.gif">", $string);
$string = str_replace(' :o ',"<img src="$img_dir/gasp.gif">", $string);
$string = str_replace(' :\ ',"<img src="$img_dir/hm.gif">", $string);
$string = str_replace(' ._. ',"<img src="$img_dir/beady.gif">", $string);
$string = str_replace(' 0:) ',"<img src="$img_dir/angel.gif">", $string);
$string = str_replace(' :x ',"<img src="$img_dir/mouthshut.gif">", $string);
$string = str_replace(' >.< ',"<img src="$img_dir/yuck.gif">", $string);
$string = str_replace(' :yawn: ',"<img src="$img_dir/yawn.gif">", $string);
$string = str_replace(' (@) ',"<img src="$img_dir/hypnotized.gif">", $string);
$string = str_replace(' :sword: ',"<img src="$img_dir/sword.gif">", $string);
$string = str_replace(' :thumbs: ',"<img src="$img_dir/thumbsup.gif">", $string);
$string = str_replace(' :yinyang: ',"<img src="$img_dir/yinyang.gif">", $string);
echo $string;
?>
i put that at the very top part of my index.php page and when i try putting a smiley (text) it doesnt convert to an image.....
Posted: Tue Jun 04, 2002 7:44 pm
by sam
What is string equal to. Is that the variable that your sending to the script? are you using php >= 4.1.x?
Cheers Sam
Posted: Tue Jun 04, 2002 9:11 pm
by Shadough
Hello, I could be wrong - but I think you could do
Code: Select all
$str .= str_replace (...);
$str .= str_replace (...);
The "." assigns $str more values that way.

Posted: Tue Jun 04, 2002 9:14 pm
by jason
Shadough: No, as that only concatenates the strings together. In this case, he wants to replace the string, or overwrite it.
Posted: Tue Jun 04, 2002 10:26 pm
by Shadough
This should work:
Code: Select all
<?php
convertSmilie($user_input, "http://www.neo-net.org/~test1/images/smileys");
function convertSmilie($user_input, $img_dir) {
$string = array();
$stringsї] = array(':)',"<img src="$img_dir/smile.gif">");
$stringsї] = array(':(',"<img src="$img_dir/frown.gif">");
$stringsї] = array(';)',"<img src="$img_dir/wink.gif">");
$stringsї] = array(':P',"<img src="$img_dir/tongue.gif">");
$stringsї] = array(':D',"<img src="$img_dir/bigsmile.gif">");
$stringsї] = array(':ї',"<img src="$img_dir/mad.gif">");
$stringsї] = array('^_^',"<img src="$img_dir/yay.gif">");
$stringsї] = array('-.-',"<img src="$img_dir/ugh.gif">");
$stringsї] = array('x_X',"<img src="$img_dir/xed.gif">");
$stringsї] = array('~_~',"<img src="$img_dir/bah.gif">");
$stringsї] = array(':*',"<img src="$img_dir/flirt.gif">");
$stringsї] = array(';(',"<img src="$img_dir/sigh.gif">");
$stringsї] = array('-_-',"<img src="$img_dir/annoyed.gif">");
$stringsї] = array(':o',"<img src="$img_dir/gasp.gif">");
$stringsї] = array(':\ ',"<img src="$img_dir/hm.gif"> ");
$stringsї] = array('._.',"<img src="$img_dir/beady.gif">");
$stringsї] = array('0:)',"<img src="$img_dir/angel.gif">");
$stringsї] = array(':x',"<img src="$img_dir/mouthshut.gif">");
$stringsї] = array('>.<',"<img src="$img_dir/yuck.gif">");
$stringsї] = array(':yawn:',"<img src="$img_dir/yawn.gif">");
$stringsї] = array('(@)',"<img src="$img_dir/hypnotized.gif">");
$stringsї] = array(':sword:',"<img src="$img_dir/sword.gif">");
$stringsї] = array(':thumbs:',"<img src="$img_dir/thumbsup.gif">");
$stringsї] = array(':yinyang:',"<img src="$img_dir/yinyang.gif">");
foreach ($strings as $string) {
$user_input = str_replace($stringї0],$stringї1],$user_input);
}
echo $user_input;
}
?>
Posted: Tue Jun 04, 2002 10:29 pm
by volka
or use regular expressions
Code: Select all
<?php
function escape_reg_chars(&$pattern)
{
$pattern = preg_replace( array('/\(/', '/\)/', '/\ї/', '/\]/', '/\//', '/\./', '/\+/', '/\*/', '/\?/'),
array('\(', '\)', '\ї', '\]', '\/', '\.', '\+', '\*', '\?'),
$pattern
);
}
function embedPattern($patVal)
{
return ('/(^|\s)'.$patVal.'(\s|$)/');
}
$img_dir = "http://www.neo-net.org/~test1/images/smileys";
$patternї]=':)'; $replaceї]="<img src="$img_dir/smile.gif">";
$patternї]=':('; $replaceї]="<img src="$img_dir/frown.gif">";
$patternї]=';)'; $replaceї]="<img src="$img_dir/wink.gif">";
$patternї]=':P'; $replaceї]="<img src="$img_dir/tongue.gif">";
$patternї]=':D'; $replaceї]="<img src="$img_dir/bigsmile.gif">";
$patternї]=':ї'; $replaceї]="<img src="$img_dir/mad.gif">";
$patternї]='^_^'; $replaceї]="<img src="$img_dir/yay.gif">";
$patternї]='-.-'; $replaceї]="<img src="$img_dir/ugh.gif">";
$patternї]='x_X'; $replaceї]="<img src="$img_dir/xed.gif">";
$patternї]='~_~'; $replaceї]="<img src="$img_dir/bah.gif">";
$patternї]=':*'; $replaceї]="<img src="$img_dir/flirt.gif">";
$patternї]=';('; $replaceї]="<img src="$img_dir/sigh.gif">";
$patternї]='-_-'; $replaceї]="<img src="$img_dir/annoyed.gif">";
$patternї]=':o'; $replaceї]="<img src="$img_dir/gasp.gif">";
$patternї]=':/'; $replaceї]="<img src="$img_dir/hm.gif">";
$patternї]='._.'; $replaceї]="<img src="$img_dir/beady.gif">";
$patternї]='0:'; $replaceї]="<img src="$img_dir/angel.gif">";
$patternї]=':x'; $replaceї]="<img src="$img_dir/mouthshut.gif">";
$patternї]='>.<'; $replaceї]="<img src="$img_dir/yuck.gif">";
$patternї]=':yawn:'; $replaceї]="<img src="$img_dir/yawn.gif">";
$patternї]='(@)'; $replaceї]="<img src="$img_dir/hypnotized.gif">";
$patternї]=':sword:'; $replaceї]="<img src="$img_dir/sword.gif">";
$patternї]=':thumbs:'; $replaceї]="<img src="$img_dir/thumbsup.gif">";
$patternї]=':yinyang:'; $replaceї]="<img src="$img_dir/yinyang.gif">";
escape_reg_chars($pattern);
$pattern = array_map('embedPattern', $pattern);
$string = ':) test :thumbs: test :/';
$string = preg_replace($pattern, $replace, $string);
print($string);
?>
this also works if $string=':) text

'
escape_reg_chars and embedPattern slows it down a bit, but filling $pattern is much easier

I may have forgotten some special characters in escape_reg_chars.
Posted: Tue Jun 04, 2002 11:44 pm
by jason
volka: Except that in this case, RegEx is just overkill, and will would be much slower.
Posted: Wed Jun 05, 2002 12:11 am
by volka
yes it is - to be honest even worse than just simply 'slower'

- preg_replace: Did it in 0.22640800476074 seconds
- str_replace: Did it in 0.015184044837952 seconds
using it's own source as input ten times concatenated (running seti@home in the background)
I thought it would be slower - but that much
But things change if the source is concatenated 200 times
- preg_replace: Did it in 4.3865120410919 seconds
- str_replace: Did it in 6.220116019249 seconds
but this test was unfair

since I kept the array in preg_replace but used the
Code: Select all
$string = str_replace($patternї$i], $replaceї$i], $string);
loop for str_replace
ok ok

only improvment is: it replaces smilies at the begin/end of a line properly

Posted: Wed Jun 05, 2002 8:27 am
by enygma
btw - str_replace can accept arrays too:
Code: Select all
$array1=array(":)",":(");
$array2=array("<img src="$img_dir/smile.gif">",,"<img src="$img_dir/frown.gif">");
$string=str_replace($array1,$array2,$string);
Posted: Wed Jun 05, 2002 10:59 am
by Wayne
try removing the white space around your smiley codes and change the quotations.
ie. ":)"
instead of ' :) '
code should look like
$string = str_replace(":)","<img src=\"$img_dir/smile.gif\">", $string);