我正在使用Last.fm API来获取艺术家的一些信息。我将信息保存在数据库中,然后显示在我的网页上。 但“(双引号)等字符显示为”。HTML页面上的奇怪字符
例艺术家信息http://www.last.fm/music/David+Penn
和我得到了第一线“从马德里 - 西班牙制片人,编曲,DJ和音乐人。他有自己的唱片公司€œZenRecordsâ€和”。
我的Db是UTF-8,但我不知道为什么这个错误还在。
我正在使用Last.fm API来获取艺术家的一些信息。我将信息保存在数据库中,然后显示在我的网页上。 但“(双引号)等字符显示为”。HTML页面上的奇怪字符
例艺术家信息http://www.last.fm/music/David+Penn
和我得到了第一线“从马德里 - 西班牙制片人,编曲,DJ和音乐人。他有自己的唱片公司€œZenRecordsâ€和”。
我的Db是UTF-8,但我不知道为什么这个错误还在。
你应该一直使用UTF-8。检查:
您与数据库的连接是UTF-8(使用mysql_set_charset
);
您输出的页面被标记为UTF-8(<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
);
当您从数据库输出字符串时,您使用htmlspecialchars()
而不是htmlentities()
对它们进行HTML编码。
htmlentities
HTML编码的所有非ASCII字符,并默认假设你通过它在ISO 8859字节。所以如果你通过编码为UTF-8(字节0xE2,0x80,0x9C)的“
,你会得到“
,而不是预期的“
或“
。这可以通过传入utf-8
作为可选的$charset
参数来解决。
但是,通常使用htmlspecialchars()
代替HTML实体引用,因为这样会将非ASCII字符单独留作原始字节。这会导致较小的页面输出,所以最好只要你确定你正在生成的HTML会保留它的字符集信息(除了在邮件中发送HTML代码片段之类的情况之外,你通常可以依赖这些信息) )。
htmlspecialchars()
确实有一个可选的参数$charset
过,但因为这使得在默认的ISO-8859-1字符集的行为的变化可能会导致其设置为utf-8
并不重要。如果你正在用Shift-JIS这样的老式多字节编码产生输出,你不必担心正确设置这个参数,但是今天这很少见,因为大多数理智的人优先使用UTF-8。
这似乎是一个字符编码错误。确认您正在以正确的编码阅读网页,并以正确的编码显示结果。
我应该使用什么编码? – Arshdeep 2010-06-24 15:44:32