我最近在我的网站上遇到了一个奇怪的问题。其中有æø和å的图像(西欧标志)将无法显示。
所有网站上的字符编码都是“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代码上传,可以上传到正确的目录,并且没有欧洲标志的问题。
有人知道造成这种情况的原因吗?
答案 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进行年龄编码