【问题标题】:First time running into charset issue第一次遇到字符集问题
【发布时间】:2012-06-01 15:20:57
【问题描述】:

我从另一个站点复制粘贴了某个段落,结果中有问号,例如

animal�ideally 

我的服务器显然设置为 iso-8859-1,而我的元标记说将字符集设置为 utf-8。

我从未使用过字符集,除了我一直在研究的内容之外,我不知道它是什么。

如果我将内容从数据库中退出或直接在提交时退出,它包含 ?分数。为了使这些问号消失,我必须采取什么程序或行动方案?

阅读mysql_query中所说的其他帖子

   mysql_query("SET NAMES 'UTF8');

我这样做了,但仍然没有帮助。

我该怎么办?谢谢。

【问题讨论】:

  • 如果您的服务器“设置为 iso-8859-1”并且 显示“utf-8”,则可能存在一些问题。也将服务器编码设置为 UTF8。
  • 请务必阅读Handling Unicode Front To Back in a Web App。我猜您需要从您的代码中显式发送 Content-Type: text/html;charset=utf-8 标头。
  • 尝试将排序规则更改为 utf8_bin
  • 当您说您的server is set to iso-8859-1 时,具体设置在哪里?如果你copy pasted a certain paragraph from another site,你把它粘贴到哪里了?听起来您的 editor 设置为 IS-8859-1,这就是您需要更改编码的地方 - 可能您希望 UTF-8 没有BOM。如果您这样做,浏览器应该尊重您的元标记 - 但是如果您的编辑器设置为错误的编码,则存储在服务器上的文档将无效。
  • 您的代码在这里缺少一个“

标签: php character-encoding


【解决方案1】:

要在页面中显示 UTF8 字符,您需要为页面设置字符集:

<meta charset="utf-8">

如果你想把这些字符存入数据库,数据库也是UTF8:

CREATE TABLE foo
(
   id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
   ...
 ) CHARACTER SET utf8 COLLATE utf8_general_ci

您还需要为 utf8 设置 php:(在顶部)

header("Content-Type: text/html; charset=UTF-8\n");

【讨论】:

  • 感谢您的回复。原来问题是我在将数据放入数据库之前对数据运行了 htmlentities,这会破坏它。由于某种原因,它不知道如何从 htmlentities 重新解释它,有什么解决方案吗?
  • 为什么叫htmlentities?是否有理由将所有适用的字符转换为它们的 x;喜欢价值观?如果你想要反过来,你可以在你的字符串上调用 html_entity_decode($data) 把它们放回去。
  • 很好的提示,谢谢。我使用的 htmlentities 破坏了 utf8 的内容,并且 htmlspecialchars 与您的修复程序一起工作。我不知道在尝试保护用户输入内容时不需要 htmlentities :D
【解决方案2】:

如果您使用的是 phpmyadmin,您需要将字符集更改为 utf8_general_ci。 您可以访问这个页面:Change default Charset

【讨论】:

    猜你喜欢
    • 2022-12-18
    • 2011-09-18
    • 2020-04-25
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    相关资源
    最近更新 更多