Ich möchte einen (HTML) Parser basierend auf Zustandsmaschine schreiben, aber ich habe Zweifel, wie man eine Eingabe wirklich lesen/verwenden. Ich entschied mich, die gesamte Eingabe in eine Zeichenfolge zu laden und dann mit ihr wie mit einem Array zu arbeiten und ihren Index als aktuelle Parsing-Position zu halten.Parsing Multibyte Zeichenfolge in PHP
Es gibt keine Probleme mit der Ein-Byte-Kodierung, aber bei der Multi-Byte-Kodierung repräsentiert jeder Wert kein Zeichen, sondern ein Byte eines Zeichens.
Beispiel:
$mb_string = 'žščř'; //4 multi-byte characters in UTF-8
for($i=0; $i < 4; $i++)
{
echo $mb_string[$i], PHP_EOL;
}
Ausgänge:
Ĺ
ž
Ĺ
Ą
Dies bedeutet, dass ich nicht durch den Strang in einer Schleife durchlaufen können einzelne Zeichen zu überprüfen, weil ich nie weiß, wenn ich bin in die Mitte eines Charakters oder nicht.
So sind die Fragen:
- Wie kann ich Multi-Byte ein einzelnes Zeichen aus einer Zeichenkette in einer Leistung freundlich sicher lesen?
- Ist es eine gute Idee mit dem String zu arbeiten, wie es ein Array in diesem Fall war?
- Wie würden Sie die Eingabe lesen?
Beachten Sie, dass der Kommentarbereich für 'mb_split' Referenz Es enthält viele Beispiele dafür, wie man einen Multibyte-String in ein Array von Zeichen aufteilt - zum Beispiel http://us2.php.net/manual/en/function.mb-split.php#80046 – Amber
@Dav I don ' Ich glaube, er braucht wirklich ein Array. –
durch Eingabe ich meine den HTML-Code zu analysieren. Vielleicht gibt es einen völlig anderen Weg, wie man den String mit Zustandsmaschine benutzt, den ich vermisse :-) ...aber die mb_substr sieht gut aus (wenn ich die String-Codierung kenne, die nicht so offensichtlich ist) –