Zitat:
Original geschrieben von itsmejake
Hallo,
kann mit jemand erklären, warum das hier nicht funktioniert:
PHP-Code:
preg_match('/^(über |über: )/u',utf8_encode($value))
|
Das geht effektiver (sprich: schneller):
PHP-Code:
preg_match('/^über:? /u', utf8_encode($value));
Zitat:
|
Es soll damit überprüft werden, ob am anfang des strings das wort "über" steht. Aber es gibt probleme mit dem Umlaut "ü". Damit die Überprüfung auf Umlaute funktioniert soll das ganze utf8 codiert sein.
|
Warum? Du wandelst den zu durchsuchenden String erst von ISO-Latin-1 in UTF-8, um ihn dann zu durchsuchen. Das ist umständlich. Du solltest die UTF-8-Funktionalität der PCRE-Befehle benutzen, wenn sie auch wirklich benötigt wird. So lange dein $value aber ISO-LATIN-1 enthält (oder eine andere 8-Bit-Kodierung), ist das unnötig. Daher genügt:
PHP-Code:
preg_match('/^über:? /', $value);
Das ist schneller und geht mit dem Hauptspeicher sparsamer um.
Zitat:
Aber irgendwie gibt es da probleme:
Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 3
|
Auf "Offset 3" steht dein "ü".
Also ist höchstwahrscheinlich deine Quelltext-Datei nicht UTF-8-kodiert. Das kannst du bspw. mit einem Hex-Viewer/-Editor
prüfen -- dann müsste das "ü" nämlich aus zwei Bytes bestehen.
Wenn du dem Rat von PHP-Desaster folgst, dann denke daran, dass UTF-Zeichen in PCRE so kodiert werden:
PHP-Code:
preg_match('/^\x{0fc}ber:? /u', utf8_encode($value));