;)表示在使用")时显示

时间:2017-02-05 18:45:39

标签: php str-replace

我运行一个有一些表情的论坛网站。代码为;)。没什么奇怪的。要解析它,我使用命令

$text = str_ireplace(array(";)", ";-)", "^wink^"), "<img src='/images/emotes/wink.png' style='height: 30px;width:30px; vertical-align:text-top;'>", $text);

(对不起,如果我输错了。我现在无法复制粘贴)

一切都很好,但是当我尝试提供示例代码时:

function("mind");

我得到了这个回报:

  

功能(&#34;心&#34; 图像);

我在想,为什么会这样。我也在其他网页上看到过它(mrush.net)。只有在您输入")但仅替换)时才会发生这种情况。引号留下。

对此有任何解释吗?

1 个答案:

答案 0 :(得分:4)

问题是您正在替换已使用htmlspecialchars或类似内容转义的HTML字符串,该字符串会将引号转义为&quot;。所以顺序是:

  1. 用户输入")
  2. escape函数将其转义为&quot;)
  3. 替换会看到;)并输出&quot<img...>
  4. 浏览器会看到&quot并假设您的意思是&quot;,因此会显示引号和图片
  5. 这很棘手,因为您无法在 HTML转义之前应用替换,因为您要为图像插入实际的HTML。

    一种方法是使用明确的占位符,例如您的长格式^wink^

    1. ;)的实例替换为^wink^
    2. 转义HTML
    3. ^wink^替换为<img...>