PHP的笑脸解析器

时间:2014-02-15 04:30:20

标签: php parsing str-replace

我有show smileys的代码

    $C->POST_ICONS  = array (
         ':)'   => 's1.gif', 
         ':))'  => 's33.gif', 
        )

和课程使用:

  foreach($C->POST_ICONS as $k=>$v) {
                    $message    = str_replace($k, '<img src="'.$C->IMG_URL.'icons/'.$v.'" class="post_smiley" alt="'.$k.'" title="'.$k.'" rel="tooltip" />', $message);
    }

问题:当我发布:))时只显示s1.gif和)!但应该显示s33.gif

2 个答案:

答案 0 :(得分:1)

这永远不会奏效。考虑一下:

$message = "HI :))";

运行循环,遍历所有选项。首先是:),所以$ message变为:

HI <img src="s1.gif" class="post_smiley alt=":)" title=":) etc...>)
   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-- originally :)
                                                                  ^--- leftover )

现在你来:)),它不再存在于你的字符串中。

另一方面,首先替换:)),然后:)更糟糕。你最终会

HI <img src="s33.gif" .... alt="<img src="s1.gif" .... alt=":)" >>
                                ^^^^^---oops. img tag INSIDE another img tag.

你不能像这样进行盲字符串替换,其中一些替换字符串是其他字符串的子集。你最终会在更换内部的替换品中嵌套替换物等等......最终会出现一堆巨大的坏HTML。

答案 1 :(得分:0)

$C->POST_ICONS  = array (
         ':))'  => 's33.gif',
         ':)'   => 's1.gif', 

        )

试试这可能会解决您的问题。