我有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
答案 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',
)
试试这可能会解决您的问题。