使用SimpleXML隐藏字符输出图像src

时间:2014-01-07 21:17:28

标签: php xml decode

我正在使用SimpleXML来读取节点,并且我回显了图像文件名。使用foreach,我打印出来:

assets/project_Guide2Big1.jpg
assets/​project_Guide2Big2.jpg
assets/​project_Guide2Big3.jpg
assets/​project_Guide2Big4.jpg
assets/​project_Guide2Big5.jpg

我将这些值插入到我的img标签中,但除了第一个之外,图像不会出现。

我将“assets / project_Guide2Big1.jpg”复制到浏览器中。我看到了图像,但是当我复制“assets / project_Guide2Big2.jpg”时,地址就变为了这个 资产/%E2%80%8BprojectGuide2Big2.jpg。

看起来像是一些urlencoding(?)。我试图解码,但我的图像仍然无法正常工作。这太奇怪了。

%E2%80%8B来自哪里?

1 个答案:

答案 0 :(得分:1)

这看起来很像一个UTF-8字符序列,代表一些你不希望出现在那里的Unicode字符。

使用this online converter,我们可以看到UTF-8字节E2 80 8B的序列代表Unicode代码点U + 200B,这是一个“零宽度空间”。

所以不知何故,你的源XML在斜杠后面包含一个不可见的字符。当回显到屏幕时,它完全不可见 - 即使在查看源时,因为源仍然只是文本。但是当您尝试加载URL时,该字符超出了URL的有效范围,因此会被浏览器自动编码。

您可能想知道零宽度空间的重点是什么,但考虑自动自动换行功能 - 它们可能会寻找一个空间来打破,但URL不包含空格。因此,插入零宽度空间会使文本看起来相同,但允许它包裹在该特定点。另一个对此有用的角色是“软连字符”,它具有非常合适的实体名称­ - 正如我的朋友所说的那样,“软连字符很害羞,可能不会出现”。 :)