Frage

Ich möchte ein (HTML) Parser auf Zustandsmaschine basiert schreiben, aber ich habe Zweifel, wie acctually lesen / verwenden, um eine Eingabe. I beschlossen, die gesamte Eingabe in eine Zeichenfolge zu laden und dann die Arbeit mit ihm wie bei einem Array und hält dessen Index als aktuelle Position Parsing.

Es gäbe keine Probleme mit Single-Byte-Codierung, aber in Multi-Byte jeden Wert codieren, kein Zeichen darstellen, 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:

Ĺ
ž
Ĺ
Ą

Dieses Mittel kann ich nicht durchläuft die Zeichenfolge in einer Schleife einzelne Zeichen zu überprüfen, weil ich nie weiß, ob ich in der Mitte eines Charakters bin oder nicht.

So sind die Fragen sind:

  • Wie kann ich multibytesicher lesen ein einzelnes Zeichen aus einer Zeichenkette in einem Leistung freundlich?
  • Ist es gute Idee, um die Arbeit mit der Saite, wie es in einem Array war Fall?
  • Wie würden Sie die Eingabe lesen?
War es hilfreich?

Lösung

http://php.net/mb_string ist das, was Sie suchen

  • nur mb_substr Zeichen nacheinander
  • nicht bis PHP6
  • , welche Eingabe genau? Der üblicher Weg, im allgemeinen

Andere Tipps

mb_internal_encoding("UTF-8");

$mb_string = 'žščř';

$l=mb_strlen($mb_string);

for($i=0;$i<$l;$i++){
    print(mb_substr($mb_string,$i,1)."<br/>");
}

Ohne die mdb_relatedFunctions zu verwenden und mit Multi-Byte-kodierten Strings können Sie Standard-Sub-String-Funktionen verwenden, die ein Vielfaches von der gelesenen Bytes für die Kodierung.

Zum Beispiel für ein UTF-8 codierte (2 Byte) string wenn Sie das erste Zeichen aus der Zeichenfolge

$string = 'žščř'; //4 multi-byte characters in UTF-8

Sie haben die $ string to get [0] und $ string [1] Werte, so dass Sie suchen tatsächlich für die Teilkette zwischen Indizes 0 und 1 (für das erste Zeichen).

Beachten Sie, dass $ string [0] oder $ string [N] wird die erste (oder N-ten Byte des Multi-Byte-String) Referenz

Grüße,

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top