在PHP中,確定某些給定的UTF-8文本是否純粹是ASCII的最快方法是什麼?確定UTF-8文本是否全是ASCII?
回答
一個可能更快的功能是使用負字符類(因爲當它擊中的第一個字符的正則表達式可以只是停止,而且也沒有必要在內部捕獲任何):
function isAscii($str) {
return 0 == preg_match('/[^\x00-\x7F]/', $str);
}
沒有正則表達式(基於我的評論){
function isAscii($str) {
$len = strlen($str) {
for ($i = 0; $i < $len; $i++) {
if (ord($str[$i]) > 127) return false;
}
return true;
}
但我不得不問,你爲什麼如此關心更快?使用更具可讀性,更容易理解的版本,只擔心優化它,當你知道這是一個問題......
編輯:
那麼最快將可能是mb_check_encoding
:
function isAscii($str) {
return mb_check_encoding($str, 'ASCII');
}
檢查是否有任何字節大於0x7f,或者任何字符大於U + 007F。
非常簡單'$ isNotAscii = false; for($ i = 0,$ len = strlen($ string); $ i <$ len; $ i ++){if(ord($ string [$ i])> 127){$ isNotAscii = true;打破; }}。它遍歷字符串的每個字符尋找一個字符> 127 ... – ircmaxell 2010-11-10 18:21:27
我相信在這種情況下preg_match會更快...沒有基準但對於字符串模式匹配,它幾乎總是 – 2010-11-10 18:48:26
function isAscii($str) {
return preg_match('/^([\x00-\x7F])*$/', $str);
}
// doesn't accept ASCII control characters
function isAsciiText($str) {
return preg_match('/^([\x09\x0A\x0D\x20-\x7E])*$/', $str);
}
這將失敗的一些有效ASCII控制字符 – stillstanding 2010-11-10 18:27:04
查看更新的功能。這是否比迭代更快/更好? – philfreo 2010-11-10 18:30:49
- 1. 確定沒有BOM的文本文件是UTF8還是ASCII
- 2. 確定是否沒有BOM的文本文件是UTF8或ASCII VB.NET
- 3. 如何確定這是latin1還是utf8?
- 4. 確定文本是否爲英文?
- 5. 確定文本是否爲英文
- 6. 用UTF8文本POST自帶ASCII
- 7. 如何確定文件是否是Eclipse中的文本文件
- 8. 是ascii文字藝術是否便攜?
- 9. 檢查NSData是否包含ASCII或UTF8編碼
- 10. 確定數組是否完全排序
- 11. 確定一個流是否全緩衝
- 12. 檢查UI_USER_INTERFACE_IDIOM()以確定它是iPhone還是iPad是否安全?
- 13. python-scrapinghub,ascii/utf8?
- 14. 如何確定shell腳本是安全
- 15. 確定文本字段中是否存在class =「x」的文本
- 16. 確定文件位置是否是bash腳本中的別名
- 17. 確定字符串是否是文本中的專有名詞
- 18. 確定刪除本地git存儲庫是否安全
- 19. 使用Python3寫入ASCII格式的文件,而不是UTF8
- 20. 是否符合Phalcon UTF8?
- 21. 將輸入文件或流轉換爲UTF8,並檢測它是否是UTF8(asp.net)
- 22. 如何確定某個文本是否完全顯示在UITableViewCell中?
- 23. 是否可以使用unicode或utf8在WxDC中繪製文本?
- 24. 確定是否XScale的是存在於安全的方式
- 25. 確定行是否是完全內path2d形狀(在Java)
- 26. 如何確定一個組是否是安全組?
- 27. 如何確定此方法是否是線程安全的?
- 28. 解壓UTF8到ASCII
- 29. 檢測文件是否是ISO-8859-1/Unicode(或不是ASCII)
- 30. 確定網頁中的選定文本是否爲粗體
這將頻繁地運行在很多文本上,我認爲這兩個都是非常可讀的,所以在這裏速度更快肯定會更好。 – philfreo 2010-11-10 18:48:27
@philfreo:更新了一個答案...但是,告訴最快的最好方法是使用您的條件實際對基準選項進行基準測試...... – ircmaxell 2010-11-10 18:52:55
但顯然php的ord函數與utf-8存在問題 – barlop 2016-06-25 10:06:43