2017-10-09 83 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或任何其他字符集,並且只對你的所有內部任務使用字符串)。這個簡單的規則(文件編輯器和一些跨平臺的基於文檔的應用程序)只有少數例外。