2017-10-09 84 views
2

我有一个脚本,如何知道字符串是不是多字节如何知道在哪里使用mb_string,哪里不是?

总是使用mb_string函数安全吗?

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

+1

所以,你让它张贴问题,得到的解决方案,然后逃跑没有做他们什么,如“接受”他们的答案的习惯? –

+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/

+0

我是问我怎么知道它的多字节,我没怎么reckognize编码。也是英语。 –

+0

@J。我仍然阅读这个问题,但不清楚你如何识别你的多字节语言。不是简单的评论,但看看在github上这个项目,你得到了一个解决方案只是需要一个时间来安装和测试,我得到一个名为'bestResults一个首选方法()'。问候。 https://github.com/headmax/language-detection – 2017-10-18 18:57:55

+0

@J。母鹿哦,我看到对不起你有一类是在命名phpcake框架所著checkMultibytes https://api.cakephp.org/2.5/class-Multibyte.html但没有测试我不知道如果有一个供应商或捆安装在你的项目中。 https://api.cakephp.org/2.5/source-class-Multibyte.html#861-877 – 2017-10-18 20:07:34

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