📜  不推荐使用 php ord - PHP (1)

📅  最后修改于: 2023-12-03 15:06:12.785000             🧑  作者: Mango

不推荐使用 PHP ord - PHP

简介

ord() 函数是 PHP 中用于获取字符的 ASCII 值的函数。 它将一个字符作为参数,并返回对应的 ASCII 值。

语法
ord ( string $string ) : int
参数
  • string:必需。要获取 ASCII 值的字符。
返回值

该函数返回 string 字符的 ASCII 值。

为什么不推荐使用 ord()

虽然 ord() 函数在处理 ASCII 字符中非常有用,但在处理非 ASCII 字符时, 它可能会产生一些令人惊讶的行为,因此不建议在生产环境中使用。

ord() 函数假设字符串中只包含 ASCII 字符,当使用 ord() 函数处理非 ASCII 字符时, 它会将字符串中的字符转换为一些神秘的数字,这些数字在某些情况下甚至并不是唯一的。 因此,如果您的代码需要处理非 ASCII 字符,那么您应该使用 mb_ord() 函数或 IntlChar::ord() 函数,这些函数都支持多字节字符集。

下面的示例演示了使用 ord() 函数处理非 ASCII 字符的行为。

$chinese = '中文';
echo ord($chinese[0]); // 输出:228
echo ord($chinese[1]); // 输出:184
echo ord($chinese[2]); // 输出:173

上面的示例中,为了方便演示,我们假设了字符串 $chinese 使用的字符集是 UTF-8。 事实上,无论使用哪种字符集,都不应该使用 ord() 函数来获取非 ASCII 字符的值。

替代方案

如果您需要处理字符串中的字符,您应该使用合适的字符串处理函数,例如 mb_* 系列函数或 IntlChar 类。

使用 mb_ord() 函数

mb_ord() 函数可以返回多字节字符的 Unicode 值。

$chinese = '中文';
echo mb_ord($chinese[0], 'UTF-8'); // 输出:20013
echo mb_ord($chinese[1], 'UTF-8'); // 输出:25991
echo mb_ord($chinese[2], 'UTF-8'); // 输出:0
使用 IntlChar::ord() 函数

IntlChar::ord() 函数可以返回 Unicode 字符的值。

$chinese = '中文';
echo IntlChar::ord($chinese[0]); // 输出:20013
echo IntlChar::ord($chinese[1]); // 输出:25991
echo IntlChar::ord($chinese[2]); // 输出:0
结论

在 PHP 中,ord() 函数可以方便地获取 ASCII 字符的值,但不建议在生产环境中使用 ord() 函数来处理非 ASCII 字符。 如果您需要处理字符串中的非 ASCII 字符,您应该使用 mb_* 系列函数或 IntlChar 类。