Frage

ich habe ein Problem mit einer einfachen Suche zu tun für einen Zwei-Zeichen Unicode-String (die Nadel) in einer anderen Zeichenfolge (Heuhaufen), die nicht UTF-8

sein kann oder

Ein Teil des Problems ist, weiß ich nicht, wie Sie den Code für die in strpos Verwendung zu spezifizieren, und ich weiß nicht, ob PHP mit einer besonderen Unterstützung kompiliert werden muss für den Code, oder wenn ich mb_strpos verwenden die ich zu vermeiden versuchen, da es auch nicht zur Verfügung.

dh. beispielsweise ist die Nadel U+56DE U+590D (ohne den Raum)

Mit preg_match es preg_match("@\x{56DE}\x{590D}@",$haystack) sein könnte aber das eigentlich erfordert @u, die nicht verfügbar sein könnten, und ich bekomme eine Compilation failed: character value in \x{...} sequence is too large trotzdem.

Ich will nicht zu verwenden preg_match sowieso, da es deutlich langsamer sein könnte als strpos (es gibt auch andere Sequenzen, die durchsucht werden müssen).

Kann ich convert U+56DE U+590D in einzelne Byte-Sequenz (möglicherweise 5-6 Zeichen) und dann für sie über strpos suchen? Ich kann nicht herausfinden, wie es zu Bytes konvertieren, wenn so.

Wie Sie Unicode-inline in PHP sowieso angeben? Ich meine außerhalb von PRCE?

$blah="\u56DE\u590D"; nicht funktioniert?

Vielen Dank für alle Ideen!

War es hilfreich?

Lösung

Zuerst wird Ihre Frage schlecht strukturiert. Es hat mehrere Fragen an mehreren Punkten. Sie würden wahrscheinlich mehr Antworten bekommen, wenn Sie eine klare Struktur verwendet: 1) beschreiben die Aufgabe, die Sie erreichen wollen, 2) die Einschränkungen / Anforderungen, 3) die Strategie, die Sie in Betracht gezogen, 4), um die Schwierigkeiten, die Sie mit einer solchen Strategie gefunden / gibt es eine bessere.

sagte, dass, ich werde bis zum Ende starten:

  

$blah="\u56DE\u590D"; funktioniert nicht?

Nein. Die Sprache weiß nichts über Unicode. In PHP Strings sind Byte-Arrays. Deshalb, wie Sie ein Unicode-Codepunkte in einem PHP-Skript ausdrücken, hängt von der Codierung Sie verwenden möchten. Für UTF-8, wäre es "\xE5\x9B\x9E\xE5\xA4\x8D", für UTF-16 Big-Endian wäre "\x56\xDE\x59\x0D", und so weiter.

sein
  

Kann ich convert U+56DE U+590D in einzelne Byte-Sequenz (möglicherweise 5-6 Zeichen) und dann für sie über strpos suchen? Ich kann nicht herausfinden, wie es zu Bytes konvertieren, wenn so.

, wobei der erste Teil, ja, das heißt, die Umwandlung in U+56DE U+590D Bytes wird eine Klärung erforderlich. Sind diese UTF-16 Code-Einheiten oder Unicode-Codepunkte? Zum Beispiel: Wie ist 𪛖 vertreten? U+D869 U+uDED6 oder U+2A6D6? Wenn sie Unicode-Codeeinheiten sind, ist es trivial sie in UTF-16 zu kodieren. Für UTF-16 Big-Endian, es ist nur "\x56\xDE\x59\x0D". Ansonsten ist es immer noch trivial sie UTF-32, zu kodieren, aber es dauert eine wenig mehr Arbeit das gleiche in UTF-16 (oder UTF-8) zu tun.

Für den zweiten Teil, lesen Sie weiter.

  

Ein Teil des Problems ist, weiß ich nicht, wie Sie den Code für die in strpos Verwendung zu spezifizieren, und ich weiß nicht, ob PHP mit einer besonderen Unterstützung kompiliert werden muss für den Code, oder wenn ich mb_strpos verwenden die ich zu vermeiden versuchen, da es auch nicht zur Verfügung.

Was wollen Sie tun? Warum brauchen Sie eine Position in einer Zeichenfolge zu finden? strpos werden Sie ein Byte für eine bestimmte Zeichenfolge Offset (auch hier in binärer Form interpretiert). Sind Sie versuchen, eine Zeichenfolge zu befestigen? strpos (oder sogar mb_strpos) mittleres Probleme in Unicode - eine Glyphe kann durch mehrere Codeeinheiten gebildet werden, so riskieren Sie Teil eines Glyphe Clipping. Ich kann Ihnen nicht raten, mehr, wenn Sie sagen, was Sie zu tun versuchen.

Andere Tipps

Sie schrieb ‚nicht verfügbar sein könnten.‘ Ich schlage vor, Sie versuchen mb_strpos .

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