【问题标题】:PHP: is the implode() function safe for multibyte strings?PHP:implode() 函数对多字节字符串安全吗?
【发布时间】:2012-01-23 19:09:00
【问题描述】:

explode() 函数在mb_split() 中有一个相关的多字节安全函数。

我没有看到 implode() 的相关函数。这是否意味着 implode 对于多字节字符串已经是安全的了?

【问题讨论】:

  • 我很难理解为什么首先需要一个多字节安全的split() - 默认情况下拆分字符串是多字节安全的,不是吗?但这是一个不同的问题。
  • PHP 将所有字符串 (AFAIK) 存储为原始二进制字节序列,因此理论上应该可以将 explode() 与多字节字符串一起使用,只要您传递正确的二进制表示拆分令牌。因此,这同样适用于implode() - 作为连接分隔符传递的二进制序列将按字面意思使用,因此只要您的分隔符正确存储,应该没有问题。
  • @DaveRandom:一个多字节字符可能看起来像两个单字节字符吗?如果这些单字节字符中的一个恰好是分隔符,那么您是否可能会无意中在多字节字符上进行拆分?
  • 为什么你的字符串会包含多字节单字节字符?这不会是一个损坏的字符串吗?
  • 哦,我明白你的意思了,两个字符的边界重叠以创建序列......好吧,在这种情况下是的,我想它可以 - 但这已经进入了我的深度没有资格发表评论。

标签: php multibyte implode


【解决方案1】:

只要您的分隔符和数组中的字符串仅包含格式良好的多字节序列,就不会有任何问题。

implode 基本上是一个花哨的连接运算符,我无法想象连接不是多字节安全的场景;)

【讨论】:

  • 我不完全确定您在这种情况下所说的“格式良好的多字节序列”是什么意思? (不过我同意其余的)
  • 谢谢。我使用空格作为分隔符:mb_split(' ', $mbstring)。这是否构成格式良好的多字节序列?
  • @danielfaraday 这取决于您的脚本是否存储在字符串使用的多字节字符集中。如果不是,那么不,它不是。
  • @DaveRandom:你能解释一下吗?我不确定您将脚本存储在字符集中是什么意思。
  • 好吧,如果您的脚本以单字节字符集存储(即由您的编辑器保存到磁盘,或其他),那么' ' 将是单字节空间,这可能不是在目标字符集中有效
猜你喜欢
  • 2017-07-06
  • 2011-12-05
  • 1970-01-01
  • 2010-12-18
  • 2013-05-27
  • 2010-11-08
  • 2018-01-16
  • 2011-09-05
相关资源
最近更新 更多