如何知道在哪里使用mb_string以及哪里没有?

时间:2017-10-09 14:47:52

标签: php

我有一个脚本,如何知道字符串多字节

始终使用mb_string功能是否安全?

它不慢吗?考虑到它不是多字节字符串,它是否像普通字符串函数一样快速工作?

2 个答案:

答案 0 :(得分:0)

  

我有一个脚本,如何知道字符串是否是多字节的?

检测字符编码 mb_detect_encoding

 string mb_detect_encoding ( string $str [, mixed $encoding_list =
 mb_detect_order() [, bool $strict = false ]] )

http://php.net/manual/en/function.mb-detect-encoding.php

  

始终使用mb_string函数是否安全?

漏洞利用:堆缓冲区溢出

由于解码器对错误条件的错误处理,有效地绕过了堆分配缓冲区的边界检查。如果攻击者获得对解码器输入的控制权,攻击者可以利用此漏洞将任意数据传输到堆的特定区域。

  

解决方案:   升级到5.2.8版。请注意,已停止维护4.x系列。

http://www.securiteam.com/unixfocus/6X00P0ANFM.html

  

它不慢吗?它是否像上的普通字符串函数一样快   考虑到它不是多字节字符串?

Iconv vs mbstring解决方案

https://beeznest.wordpress.com/2008/10/05/mbstring-vs-iconv-benchmarking/

答案 1 :(得分:0)

  1. 如果您希望使用ASCII表格中未描述的字符(英语和西班牙语),则必须使用mb *方法。此外,在这种情况下,你不应该使用$ string [n]调用来获取字符串中的字符。
  2. mb *方法通常比非mb *方法慢~x1.5倍。但是,它对于常见的Web任务没有任何实际意义。
  3. 请不要使用mb_detect_encoding来检测字符集。它可能工作真的不准确,因为这样的方法使用基于猜测流中的字符及其统计数据的算法。这里最好的解决方案是说代码的所有部分只能使用1个预定义的字符集(只需选择UTF-8或任何其他字符集,并仅使用它来处理所有带字符串的内部任务)。这个简单的规则(文件编辑器和一些跨平台的基于文档的应用程序)只有少数例外。