我想寫一個基於狀態機的(HTML)解析器,但我懷疑如何實際讀取/使用輸入。我決定將整個輸入加載到一個字符串中,然後像數組一樣處理它,並將其索引保存爲當前解析位置。解析PHP中的多字節字符串
單字節編碼沒有問題,但在多字節編碼中,每個值不代表一個字符,而是一個字符的字節。
例子:
$mb_string = 'žščř'; //4 multi-byte characters in UTF-8
for($i=0; $i < 4; $i++)
{
echo $mb_string[$i], PHP_EOL;
}
輸出:
Ĺ
ž
Ĺ
Ą
這意味着在一個循環中我無法通過字符串遍歷檢查單個字符,因爲我從來不知道我是否在一個人物的中間或沒有。
所以問題是:
- 如何多字節安全的 性能友好的方式讀取一個字符串 單個字符?
- 與 字符串一起使用是否好主意,因爲它是這個 大小寫中的數組?
- 你會如何閱讀輸入?
注意,對於'mb_split'評論部分其中包含許多如何將多字節字符串分解爲字符數組的示例 - 例如http://us2.php.net/manual/en/function.mb-split.php#80046 – Amber 2010-04-07 08:45:32
@Dav I don'我認爲他真的需要一個陣列。 – 2010-04-07 08:47:01
通過輸入我的意思是解析的HTML代碼。也許有完全不同的方式如何使用字符串與我缺少的狀態機:-) ...但mb_substr看起來很好(如果我知道字符串編碼,這是不是很明顯) – 2010-04-07 09:08:21