;) 使用 ") 时显示的表情

;) emote showing when using ")

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

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

(抱歉,如果我打错了。我现在无法复制粘贴)

一切正常,但当我尝试给出示例代码时:

function("mind");

我在 return 中得到了这个:

function("mind"image);

我想知道为什么会这样。我也在其他网页上看到它(mrush.net)。只有当您键入 ") 时才会发生,但只会替换 )。引号保留。

有什么解释吗?

问题是您在 HTML 字符串中替换,您已经用 htmlspecialchars 或类似的字符串进行了转义,将引号转义为 &quot;。所以顺序是:

  1. 用户类型")
  2. escape 函数将其转义为 &quot;)
  3. 替换看到 ;) 并输出 &quot<img...>
  4. 浏览器看到 &quot 并假定您的意思是 &quot;,因此显示引号和图像

这很棘手,因为您不能在 HTML-escaping 之前应用替换 ,因为您想为图像插入实际的 HTML。

一种方法是使用明确的占位符,例如您的 long-form ^wink^:

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