【问题标题】:Weird charactors on HTML pageHTML页面上的奇怪字符
【发布时间】:2010-06-24 15:05:26
【问题描述】:

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

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

我得到的第一行是“来自马德里-西班牙的制作人、编曲、DJ 和音乐家。他有自己的唱片公司“Zen Records”,并且“。

我的 Db 是 UTF-8,但我不知道为什么还会出现这个错误。

【问题讨论】:

    标签: character-encoding


    【解决方案1】:

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

    【讨论】:

    • 我应该使用什么编码?
    【解决方案2】:

    您应该一直使用 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 编码。

    htmlentities 对所有非 ASCII 字符进行 HTML 编码,默认情况下假定您传递的是 ISO-8859-1 中的字节。因此,如果您将 编码为 UTF-8(字节 0xE2、0x80、0x9C)传递,您将得到 “,而不是预期的 ““。这可以通过传入utf-8 作为可选的$charset 参数来解决。

    但是,通常只使用htmlspecialchars() 会更容易,因为这会将非 ASCII 字符单独保留为原始字节,而不是 HTML 实体引用。这会导致较小的页面输出,因此只要您确定您正在生成的 HTML 将保留其字符集信息(您通常可以依赖这些信息,除非在上下文中,例如在邮件中发送 HTML 的 sn-ps什么的)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 2012-10-15
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多