Umlaute / preg_replace problem

fireblade1282

Mitglied
Servus!
Ich habe folgendes, für meine Begriffe erstaunliches Problem:
Standardszenario: Ich will einen BB artigen Code der Form

[IMAGE:"identifier"]

replacen.

dazu habe ich folgenden Code

Code:
  $pattern  = '/(\[)( *)(image)( *)(:)( *)(")([^"]+)(")( *)(\])/iu';
  $replace  = '<img src="filepool/$8" alt="Image: $8">';
  $template = preg_replace($pattern, $replace, $template);

Ich hoffe, dass der regExp so stimmt.

Jetzt kommt das abgefahrene:

Für die Eingabe
$template = 'test a [IMAGE:"pin.png"]';
erhalte ich den String
$template = 'test a <img src="filepool/pin.png" border="0" alt="Image: pin.png">'

aber für die Eingabe
$template = 'test ö [IMAGE:"pin.png"]';
erhalte ich einen unreplacten String zurück.

Wenn der Umlaut IM BB Code oder so stehen würde, hätte ich jetzt einen Fehler im Zeichencodieren bzw. Regexp auslesen oder so vermutet.
Aber DAS kann ich mir nicht erklären.. bin am verzweifeln.. :(

Hat jemand eine Idee? Habe alle Foren durchsucht finde aber nur umlaute die nicht
gefunden werden... aber bei mir hat der Umlaut doch gar nix mit dem replacen zu tun oder?
 
Woran das liegen könnnte, kann ich dir gerade leider auch nicht sagen. Aber probier mal folgenden strikteren Regulären Ausdruck:
Code:
\[image:"([^"\]]+)"\]
 
Hallo Gumbo,
danke für deine Antwort...
ich werde den "strikteren Code" testen, aber soweit ich das sehe liegt
es wohl an einem meiner optionalen Parameter...

Wenn ich es richtig verstanden habe bringe ich einen Delimiter, dann den
eigentlichen RegExp, danach wieder den Delimiter und die Optionen.
In meinem Fall i für case-I-nsensitive und ungreedy...
sobald u verwendet wird scheint das pregmatch Texte mit Umlauten
zu ignorieren,... kann das jemand bestätigen
Andererseits hätte ich gerne eine ungreedy Variante,.. aber vllt. kann ich das
auch durch einzelne nicht zugelassene Zeichen hinbiegen.. irgendwie
bin ich mit meinem Latein am Ende...

Es kann doch nicht so schwer sein ein Pattern in einem Umlaute enthaltenden
Text zu matchen und zu replacen, wenn man sicher sein will dass das kürzeste
genommen wird...?! Manchmal versteh ich die PHP - Innereien nicht... :)


bin mit meinem Latein am Ende
 
Zurück