【发布时间】:2017-07-06 21:10:00
【问题描述】:
我越来越关注确保 PHP 应用程序是多字节安全的,这主要涉及用其等效的 mb_* 函数替换字符串操作函数。
但是字符串连接让我停下来思考。
某些字符编码(例如 UTF-16 unicode)可以在开头包含字节顺序标记。如果您连接两个 UTF16 字符串,则可能会将 BOM 引入结果字符串的开头以外的位置。我怀疑还有其他编码也可以包含“标题”信息,这样将两个相同编码的字符串拼接在一起也会有问题。在进行多字节字符串连接时,PHP 是否足够聪明以丢弃 BOM 等?我怀疑不是因为 PHP 传统上只将字符串视为字节序列。是否有等效于串联的多字节安全?我无法在 mbstring 文档中找到任何内容。
显然,连接不同编码的字符串永远不会安全,所以我现在不用担心。
【问题讨论】:
-
“PHP 够聪明吗” – 不。正如预期的那样,解决方案是在连接字符串之前从字符串中删除 BOM。
-
两年零九个月没有具体答案,那么纯 UTF-8 多字节字符串呢?