2
我的PHP配置爲mbstring.func_overload = 7
,所以所有的單字節字符串函數都被映射爲它們的多字節等價物。但我仍然有時需要將字符串視爲字節數組;例如,在計算其大小或進行加密時。使用PHP的mbstring.func_overload查找字符串中的字節
這裏最好的辦法是什麼?我可以只使用多字節函數並將它們傳遞給單字節編碼,即使這實際上並不是字符串編碼的方式嗎?例如:
mb_substr($utf8str, 0, 1, "latin1");
mb_strlen($utf8str, "latin1");
編輯:我希望通過自己修改原有的功能mb_orig_X,如mb_orig_strlen PHP的來源時發現。可能不安全,因爲它們沒有記錄,但很有趣。
我不認爲這是一個骯髒的解決方案。有時你只需要處理二進制數據。但我同意你必須小心它(見http://stackoverflow.com/questions/1647419/php-mbstring-funcoverload-vs-using-mbstring-functions)。另外,使用編碼名稱的更好選擇是「二進制」或「8位」。 – mercator 2009-11-08 17:47:08
重寫記錄良好的函數的行爲總是*一個壞主意。可以這樣想:函數對你來說是「說謊」,即它沒有做,它承諾做什麼。或者這裏是另一個:如果你的數組會停止存儲NULL值,如果在數組中甚至沒有生成密鑰,會默默地忽略它們會發生什麼?所有的配置值都是'array.store_null_values = false'(我希望PHP團隊沒有人閱讀這個,我可能會給他們不好的想法。) – soulmerge 2009-11-08 18:04:12
'binary'是一個真正的編碼嗎?我沒有看到它在http://php.net/manual/en/mbstring.supported-encodings.php上列出,但它似乎工作。你知道'binary','8bit'和'ascii'之間的區別嗎? – 2009-11-08 20:50:49