UTF

UTF,第1张

UTF

数据存储

  • utf8mb4
    数据库的所有表和文本列上指定字符集。这使得MySQL在物理上存储和检索以UTF-8本地编码的值。注意,
    utf8mb4
    如果
    utf8mb4_*
    指定了排序规则(没有任何显式字符集),MySQL将隐式使用编码。

  • 在旧版本的MySQL(<5.5.3)中,不幸的是,您将被迫

    utf8
    仅使用,仅支持Unipre字符的子集。我希望我在开玩笑。

资料存取

  • 在您的应用程序代码(例如PHP)中,无论使用哪种数据库访问方法,都需要将连接字符集设置为

    utf8mb4
    。这样,当MySQL将数据交给您的应用程序时,MySQL不会从其本地UTF-8进行转换,反之亦然。

  • 一些驱动程序提供了自己的配置连接字符集的机制,该机制既可以更新其自身的内部状态,又可以将要在连接上使用的编码通知MySQL-这通常是首选方法。在PHP中:

    • 如果您使用PHP≥5.3.6的PDO抽象层,则可以

      charset
      在DSN中指定:

          $dbh = new PDO('mysql:charset=utf8mb4');
    • 如果您使用的是mysqli,则可以调用

      set_charset()

          $mysqli->set_charset('utf8mb4');       // object oriented style

      mysqli_set_charset($link, ‘utf8mb4’); // procedural style

    • 如果您坚持使用普通的mysql,但碰巧正在运行PHP≥5.2.3,则可以致电

      mysql_set_charset

  • 如果驱动程序不提供自己的设置连接字符集的机制,则可能必须发出查询以告知MySQL您的应用程序期望连接上的数据如何被编码:

    SET NAMES 'utf8mb4'

  • 关于

    utf8mb4
    /
    utf8
    适用与上述相同的考虑。

输出

  • 如果您的应用程序将文本传输到其他系统,则还需要告知他们字符编码。对于Web应用程序,必须告知浏览器发送数据的编码(通过HTTP响应标头或HTML元数据)。

  • 在PHP中,您可以使用

    default_charset
    php.ini选项,或
    Content-Type
    自己手动发出MIME标头,这虽然工作更多,但效果相同。

  • 使用编码输出时

    json_enpre()
    ,请添加
    JSON_UNESCAPED_UNICODE
    作为第二个参数。

输入

  • 不幸的是,在尝试存储或在任何地方使用它之前,您应该验证每个收到的字符串都是有效的UTF-8。PHP

    mb_check_encoding()
    可以解决问题,但您必须谨慎使用。真的没有办法解决这个问题,因为恶意客户端可以使用他们想要的任何编码来提交数据,而且我还没有找到使PHP可靠地为您执行此 *** 作的技巧。

  • 从我对当前HTML规范的阅读中,对于现代HTML,以下子项目不再是必需的,甚至不再有效。我的理解是浏览器将使用为文档指定的字符集并提交数据。但是,如果您定位的是旧版HTML(XHTML,HTML4等),则以下几点可能仍然有用:

    • 仅适用于HTML5之前的HTML :您希望浏览器发送给您的所有数据都使用UTF-8。不幸的是,如果您唯一可靠的方法是将该
      accept-charset
      属性添加到所有
      <form>
      代码中:
      <form ... accept-charset="UTF-8">
    • 仅对于HTML5之前的HTML :请注意,W3C HTML规范指出,客户端“应”默认使用服务器提供的任何字符集将表单发送回服务器,但这显然仅是建议,因此需要在每一个服务器上都明确
      <form>
      标签。

其他代码注意事项

  • 显然,您将要提供的所有文件(PHP,HTML,Javascript等)都应使用有效的UTF-8进行编码。

  • 您需要确保每次处理UTF-8字符串时,都必须安全进行。不幸的是,这是困难的部分。您可能需要大量使用PHP的

    mbstring
    扩展。

  • PHP的内置字符串 *** 作 默认情况下 不是 UTF-8安全的。 您可以使用正常的PHP字符串 *** 作(例如串联)安全地进行某些 *** 作,但是对于大多数事情,您应该使用等效的

    mbstring
    功能。

  • 要知道您在做什么(请阅读:不要搞砸),您确实需要了解UTF-8及其在最低级别上的工作方式。查看utf8.com上的任何链接,以获取一些好的资源,以学习您需要了解的所有内容。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4889319.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-12
下一篇2022-11-12

发表评论

登录后才能评论

评论列表(0条)

    保存