2012-04-15 5 views
0

Ich versuche Zeichenfolge mit dem folgenden Code zu extrahieren:Extrahieren Unicode-String mit preg_match_all()

$item = 'id="firstname" l="Prénom" n="firstname" t="text" v=""'; 
preg_match_all('#(?:l|label|lbl)\s*=\s*"([\x{00C0}\x{00C1}\x{00C2}\x{00C3}\x{00C4}\x{00C5}\x{00C6}\x{00C7}\x{00C8}\x{00C9}\x{00CA}\x{00CB}\x{00CC}\x{00CD}\x{00CE}\x{00CF}\x{00D0}\x{00D1}\x{00D2}\x{00D3}\x{00D4}\x{00D5}\x{00D6}\x{00D7}\x{00D8}\x{00D9}\x{00DA}\x{00DB}\x{00DC}\x{00DD}\x{00E0}\x{00E1}\x{00E2}\x{00E3}\x{00E4}\x{00E5}\x{00E6}\x{00E7}\x{00E8}\x{00E9}\x{00EA}\x{00EB}\x{00EC}\x{00ED}\x{00EE}\x{00EF}\x{00F0}\x{00F1}\x{00F2}\x{00F3}\x{00F4}\x{00F5}\x{00F6}\x{00F9}\x{00FA}\x{00FB}\x{00FC}\x{00FD}\x{00FF}\sa-zA-Z0-9_-]+)"#is', $item, $m); 

Es funktioniert gut, wenn ein Nicht-Unicode-String wie „Vorname“ verwenden, aber gibt einen leeren Wert, wenn $ item enthält eine Zeichenfolge wie "Prénom"

Irgendeine Idee warum?

Antwort

1

Fügen Sie einfach u zu der Liste der Modifikatoren hinzu: isu.

+0

weil ich nur Zahlen und Buchstaben (einschließlich französischer Zeichen wie é) will so tun "([^"] +?) "Könnte einige Zeichen wie # @ und so weiter – Steve

+0

Dann einfach' u' zu der Liste hinzufügen Modifikatoren: 'isu'. Und vielleicht kürze die Liste der Codes auf' \ x {00C0} - \ x {00FF} '. In deinem Beispiel hast du' 00FE' vermisst. – Botanick

+0

Du hast recht, es musste nur hinzugefügt werden der "u" -Modifikator. Es wäre wahrscheinlich das Beste, wenn Sie Ihre Antwort für die Nachwelt entsprechend ändern würden. Was den fehlenden Wert betrifft, gibt es tatsächlich fünf von ihnen "[\ u {00DE} \ u {00DF} \ u {00E8} \ u0026 \ u003e} - und ich bin mir ziemlich sicher, dass es absichtlich war. –