2011-04-21 66 views
0

我被提供了一组表示URL链接的数据。如:"doug'sfood.jpg"PHP撇号跳过了打破链接

我一直在数组这些字符串,然后选择他们随机显示它们插入到一个

<img src="doug'sfood.jpg"></img> 

什么浏览器是放出来的是:

<img src="doug&#39;sfood.jpg"></img> 

我试图取代报价一个PHP逃脱(\')撇号,但这只是过早地结束了报价。

有人可以帮助我吗?谢谢。

+0

缺少内容类型等。如果没有这些,就无法真正回答。我的猜测是,铬正在纠正它是有效的XML(因为特殊字符不需要转义) – 2011-04-21 22:08:44

+0

内容类型?它们是.jpg字符串。 $ arr = array(“doug'sFood.jpg”);回声“”; – kirk 2011-04-21 22:11:27

+0

页面本身的内容类型以及文档类型/模式(HTML与XHTML与XML)。 – 2011-04-21 22:12:03

回答

2

我认为Chrome会自动转义未正确转义的字符。

始终使用:

<img src="quote&#39;quote.jpg" alt="" /> 

相反的:

<img src="quote'quote.jpg" alt="" /> 

某些字符应始终HTML转义,例如:)

​​

检查用htmlspecialchars(urlencode()个功能,例如:

$string = "quote'quote.jpg"; 

echo htmlspecialchars($string, ENT_QUOTES); 
// quote&#039;quote.jpg 

echo urlencode($string); 
// quote%27quote.jpg 
+0

尝试此...虽然这是什么的输出反正所以它不是我想要的。文件的名称实际上包含一个撇号... – kirk 2011-04-21 22:16:48

+1

如果HTML代码引用'quote ' quote.jpg',则浏览器实际下载'quote'quote.jpg'。为了生成有效的HTML,总是输出'quote ' quote.jpg'。浏览器在渲染页面时将'''转换为'''。 – Anne 2011-04-21 22:22:02

+0

这工作,并在同一时间打破的东西。也就是说,它确实也是它所需要的,但是我意识到我给出的图像与两种方式中的数据集都不匹配。在两种可能的情况下,一些数据具有撇号,而在另一个位置则相反。我刚刚删除了撇号,客户可以处理......谢谢。 – kirk 2011-04-21 22:27:10

0

不管怎样,打印出的文件名的标签时,使用urlencode()而不是依赖于HTML逃逸或浏览器行为:

foreach ($img as $href) { 
    print '<img src="' . urlencode($href) . '" />';   
} 

这将成为你的榜样doug%27sfood.jpg(又名正确的方式来做到这一点)。希望可以通过您的网络服务器找到它。

+1

可能只是我的偏好,但[htmlentities](http://php.net/htmlentities)在html/xhtml/xml标签中比'urlencode'更有意义。当我解析标题/重定向时,我会使用urlencode。 – 2011-04-21 22:27:26

+0

非常感谢你,如果你阅读上面的内容,你会发现我选择删除撇号并放弃代码。 – kirk 2011-04-21 22:27:50

+0

@凯文:其实:**都是**。浏览器会在网址中自动编码非ASCII字符。只需要在QS属性中正确编组'''''''或'#'。但HTML转义对于有效的HTML/XHTML同样是一个要求。 (大多数ASCII的链接都没有这两个,边缘情况很少。) – mario 2011-04-21 22:31:01