目前 PHP 在低层次上还不支持 Unicode。有几种方式可以确保 UTF-8 字符串能够被正确处理,
    但并不容易,需要深入到 web 应用的所有层面,从 HTML,到 SQL,到 PHP。我们旨在提供一个简洁、
    实用的概述。

    PHP 层面的 UTF-8

    基本的,如串接
    两个字符串、将字符串赋给变量,并不需要任何针对 UTF-8 的特殊东西。
    然而,多数 字符串函数,如 和 strlen,就需要特殊的考虑。
    这些函数都有一个对应的 函数:例如, 和 mb_strlen()
    这些对应的函数统称为。
    这些多字节字符串函数是专门为操作 Unicode 字符串而设计的。

    当你操作 Unicode 字符串时,必须使用 mb_* 函数。
    例如,如果你使用 substr() 操作一个 UTF-8 字符串,其结果就很可能包含一些乱码。
    正确的函数应该是对应的多字节函数, 。

    并不是所有的字符串函数都有一个对应的 。如果不存在你想要的那一个,那你就只能自认倒霉了。

    此外,在每个 PHP 脚本的顶部(或者在全局包含脚本的顶部)你都应使用 mb_internal_encoding 函数,如果你的脚本会输出到浏览器,那么还得紧跟其后加个 函数。在每个脚本中显式地定义字符串的编码在以后能为你减少很多令人头疼的事情。

    最后,许多操作字符串的 PHP 函数都有一个可选参数让你指定字符编码。
    若有该选项, 你应始终显式地指明 UTF-8 编码。
    例如,htmlentities() 就有一个字符编码方式选项,在处理这样的字符串时应始终指定 UTF-8。

    MySQL 层面的 UTF-8

    确保从 PHP 到 MySQL 的字符串为 UTF-8 编码的,确保你的数据库以及数据表均设置为 utf8mb4 字符集,
    并且在你的数据库中执行任何其他查询之前先执行 MySQL 查询 set names utf8mb4。这是至关重要的。
    示例请查看一节内容。

    注意你必须使用 utf8mb4 字符集来获得完整的 UTF-8 支持,而不是 字符集!原因请查看进一步阅读

    浏览器层面的 UTF-8

    使用 函数
    来确保你的 PHP 脚本输出 UTF-8 字符串到浏览器。
    并且在 HTML 页面的 <head> 标签块中包含 字符集 <meta> 标签块

    示例

    进一步阅读