HTML页面上的奇怪字符

时间:2010-06-24 15:05:26

标签: character-encoding

我使用Last.fm API获取艺术家的一些信息。我在数据库中保存信息,然后显示在我的网页上。 但是像“(双引号)这样的字符显示为”。

示例艺术家信息http://www.last.fm/music/David+Penn

我获得了第一线作为“马德里 - 西班牙的制片人,编曲家,DJ和音乐家。他有自己的唱片公司”Zen Records“和”。

Mine Db是UTF-8,但我不知道为什么这个错误仍然存​​在。

2 个答案:

答案 0 :(得分:2)

这似乎是一个字符编码错误。确认您正在以正确的编码方式阅读网页,并以正确的编码显示结果。

答案 1 :(得分:1)

你应该一直使用UTF-8。检查:

  1. 您与数据库的连接是UTF-8(使用mysql_set_charset);

  2. 您输出的网页标记为UTF-8(<meta http-equiv="Content-Type" content="text/html;charset=utf-8">);

  3. 从数据库输出字符串时,使用htmlspecialchars()而非htmlentities()对其进行HTML编码。

  4. htmlentities对所有非A​​SCII字符进行HTML编码,默认情况下假设您在ISO-8859-1中传递了字节。因此,如果您将编码为UTF-8(字节0xE2,0x80,0x9C),则会得到&acirc;&#128;&#156;,而不是预期的&ldquo;&#8220;。这可以通过传入utf-8作为可选的$charset参数来修复。

    然而,通常更容易使用htmlspecialchars(),因为这会留下非ASCII字符,作为原始字节而不是HTML实体引用。这会导致较小的页面输出,因此最好只要您确定您生成的HTML将保留其字符集信息(您通常可以依赖它,除了在上下文中,例如在邮件中发送HTML片段或其他内容) )。

    htmlspecialchars()也有一个可选的$charset参数,但将其设置为utf-8并不重要,因为这会导致默认ISO-8859-1字符集的行为没有变化。如果你使用Shift-JIS这样的老式多字节编码生成输出,你必须担心正确设置这个参数,但今天这种情况非常罕见,因为大多数理智的人都喜欢使用UTF-8。