欧洲有迹象表明img src存在问题

时间:2010-06-03 10:27:43

标签: php html character-encoding

我最近在我的网站上遇到了一个奇怪的问题。其中有æø和å的图像(西欧标志)将无法显示。

所有网站上的字符编码都是“Iso-8859-1” 我可以毫不费力地在页面上打印æø和å。 如果我右键单击“损坏的图像”并选择属性,它将显示文件名 与欧洲的迹象。 (/admin/content/galleri/å.jpg)

img的代码看起来像这样

<img name='bilde'
     src='content/{$_SESSION["linkname"]}/{$row["img"]}'
     class='topmargin_ss leftmargin_ms rightmargin_s'
     width='80' height='80'>

(不允许发布图片,因此代码没有开头和结尾括号)

制作4个文件: z.jpg æ.jpg ø.jpg A.JPG

只有z.jpg显示,它们是完全相同的jpg。 图像使用php代码上传,可以上传到正确的目录,并且没有欧洲标志的问题。

有人知道造成这种情况的原因吗?

4 个答案:

答案 0 :(得分:2)

您可能在网页(ISO-8859-1 == Latin1)与图像文件所在的文件系统之间存在不匹配 - 可能是UTF-8。

我建议:

a)以UTF-8编码网页 - 它更有可能在更多地方工作。

b)仅使用ASCII作为文件名来避免这些问题。

答案 1 :(得分:1)

htmlentities('string', ENT_QUOTES, "UTF-8")对我有用。 对于你可能

$img = "<img name='bilde'
     src='" . htmlentities("content/{$_SESSION['linkname']}/{$row['img']}", ENT_QUOTES, "UTF-8") . "' class='topmargin_ss leftmargin_ms rightmargin_s' width='80' height='80'>

您可能需要将utf8_decode($string)应用于网址,但在使用带有“UTF-8”的htmlentities时我从不需要这样做。

注意:这假设页面已经是utf-8编码的。这可以使用header('Content-Type: text/html; charset=utf-8');完成。 db中的数据保存为utf-8。 这可以通过在开始进行MySQL查询之前调用mysql_set_charset('utf8');来完成;查询"SET NAMES 'utf8'"也是如此。

答案 2 :(得分:0)

您应该使用%xx对URL进行编码,其中xx表示字节的十六进制值。截至您的网络服务器供应商的规格,这些主要是UTF-8。

  

可以使用相同的编码方法来编码其字符      尽管在URL中技术上允许使用,但由于这样做是不明智的      不完美的网关或虚假陈述造成的腐败问题      由于使用了变体字符集,或者只是简单的字符集      在特定环境中尴尬。

它依赖于浏览器,特殊符号将以UTF-8和URL编码转换。我想这不是(否则它会起作用),因为实际上没有人在文件名中使用特殊符号,只是ASCII的一小部分。

答案 3 :(得分:0)

看一下bin2hex - 你需要对那些疯狂的umlotts进行年龄编码