您曾说过到目前为止给出的解决方案都没有为您工作,但我认为实际上它们很好(至少其中一些)。让我演示一下:
以下是您列出的示例:
$json:
<img src="img/map/"ST JOHN'S"_map.PNG"/ width="600">
$html:
<img src="img/map/ST JOHN'S_map.PNG"/ width="600">
$htmlent:
<img src="img/map/ST JOHN's_map.PNG"/ width="600">
$escape:
<img src="img/map/ST JOHN\'S_map.PNG"/ width="600">
$urlenc:
<img src="img/map/ST%20JOHN%27S_map.PNG"/ width="600">
我认为这些都没有任何问题(JSON 除外,我稍后会解释)。
而且我刚刚尝试了所有这些示例,试图尽可能地模拟您的场景(甚至使用相同的文件名)......所有这些都正确加载了图形,除了 JSON 示例。
JSON 示例需要稍作调整才能使其正常工作,但它也确实以一种可行的方式转义了字符串。要使其正常工作,您需要考虑 JSON 生成一个完全引用的 JavaScript 字符串,而不是像其他字符串那样转义它,因此您需要修改输出以关闭引号并将字符串添加在一起,如下所示:
$('#map_output').html('<p><img src="img/map/"+<?=$json?>+"_map.PNG"/ width="600"></p>');
其他解决方案不需要这个。他们都按原样工作。正如我所说,我尝试了它们,它们都将图形加载到页面中。
在上下文中,所有三种机制(转义\'、实体&#039 和URL 编码%27)都是有效的:
转义有效,因为您处于 Javascript 的上下文中,因此反斜杠由 Javascript 处理,插入页面的最终生成的 HTML 将不包含它。
实体之所以有效,是因为 HTML 将实体转换为映射字符,因此 HTML 页面中的 &#039 与单引号相同,即使在本例中的属性值内也是如此。
URL 编码有效,因为浏览器在加载 URL 时会对其进行翻译。
在这种情况下,我建议 URL 编码是正确的解决方案,因为它用于 URL。原因是,虽然所有解决方案都适用于给定的示例,但如果您有任何包含问号或 & 符号 (&) 或其他一些保留字符的示例,那么 URL 编码将是唯一的解决方案将在这些情况下工作。另一方面,如果您要在另一个上下文中显示 HTML 页面中的输出,那么实体就是要走的路。如果只在 Javascript 中使用它,那么 JSON 就是答案。
但你说他们都没有成功。我的问题是:你真的尝试过吗?您是否运行了代码并且图形无法加载?它对我有用。另一方面,如果他们确实工作了,但仍然没有“成功”,那么你真正想要的是什么?
我的猜测是,您的实际意思是您希望在那里得到一个简单的引号字符,但让它神奇地工作。那不可能发生;报价必须以某种方式转义才能正常工作,但他们的用户永远不会看到转义的版本,因此无需担心。
事实上,您应该对输入或输出的所有字符串进行转义或编码,以便无效字符起作用。否则 O'Brien 先生将难以在您的网站中输入他的名字,如果他管理它,您之后将无法显示它。