【问题标题】:character encoding issue with mysqlmysql的字符编码问题
【发布时间】:2010-01-18 04:09:59
【问题描述】:

在我的 LAMP 应用程序中,用户有时会从其他应用程序(如 MS word)将输入剪切并粘贴到我的 Web 表单中。

我的所有网页都通过内容类型标记设置为以 UTF 显示。我的 PHP 脚本将 Web 表单的数据保存到 mysql 表中,该表的字符编码设置为 UTF-8。

有一个撇号字符会在 html 中正确显示,但在 mysql 表中,从 Linux 命令提示符查看,它显示为 ’。

如果html页面和mysql表都使用相同的编码,为什么那个字符的渲染不一样?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    可能原因是您的 Linux 命令提示符使用的字体不支持该字符。

    默认情况下,Windows 的 cmd 将使用也不支持的字体。不过请放心,您的数据会按照您想要的方式存储。

    【讨论】:

    • 这当然是我还没有探索过的可能性,所以我喜欢这个答案。我很难将注意力集中在这些字符编码问题上。它看到,文本通过的每个程序都具有曲解甚至改变编码的能力。就我而言,来自 Web 表单的内容最终会出现在电子邮件客户端中,并且无法正确显示。因此,该路径类似于剪贴板 -> html 表单 -> Apache -> PHP -> Mysql -> PHP -> 电子邮件服务器 -> 电子邮件客户端。真的,它可能在任何地方出错。您如何解决这些问题?
    • 我通过一个函数运行它们,在显示之前用相似的字符替换它们。例如。 Word 中那些花哨的双引号将被一个简单的双引号所取代。我认为这样更安全,因为您永远不会知道您的用户拥有什么操作系统/浏览器/设备/安装的字体。
    • .. 另一种方法是在将输入放入数据库之前对其进行验证。 (如果您在表单上使用著名的 WYSIWYG 文本编辑器,通常有一个“从 Word 粘贴”功能会自动执行此操作)这样您就不必担心在显示任何内容之前,因为这些文本已经在一个足够安全的状态。
    • 如果你真的期待东亚字符,这是一个非常不同的情况(涉及很长的讨论)。 (我认为不是)
    • .... 无论如何,这里的问题是您不应该在命令提示符下查看非标准字符。每个应用程序都有自己的默认呈现文本的方式。有些支持非标准,有些不支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2011-03-24
    相关资源
    最近更新 更多