0

我有一些用于文本过滤的 PHP 代码。在过滤过程中,一些 ASCII 字符(例如与号 (&) 和波浪号 (~))会临时转换为低位 ASCII 字符(例如十进制代码点 4 和 5)。就在生成最终过滤输出之前,转换被恢复。

$temp = str_replace(array('&', '~'), array("\x04", "\x05"), $input);
... some filtering code to work with $temp ...
$out = str_replace(array("\x04", "\x05"), array('&', '~'), $temp);

这适用于使用 8 位代码单元(如 UTF-8 和 ISO 8859-1)的字符编码的输入文本。但我不确定以更大的代码单元编码的输入,例如 UTF-16 或 UTF-32。第一个转换步骤会破坏输入文本的格式吗?由于输入的某些预先存在的字符,在还原步骤期间是否会出现一些冲突?PHP 设置不会重载多字节字符串函数。

任何人都可以发表评论吗?谢谢。

4

1 回答 1

1

str_replace 工作正常,只要传递给它的所有字符串都采用相同的编码。它只是对数据进行二进制比较/替换,因此实际编码并不重要。

这就是为什么此列表中没有 mb_str_replace 的原因。

于 2012-09-15T08:45:00.660 回答