Problem mit strpos und eckigen Klammern
ThomasP
- php
0 dedlfix0 ThomasP
0 Deus Figendi
Hallo!
Ich programmiere gerade für mein Forum eine Quote-Funktion. Dabei möchte ich überprüfen, ob die Schachtelung der [quote]-Tags auch richtig ist. Habe mir gedacht, ich mache das mit strpos, aber das klappt nicht.
$qpos=strpos($threadtext,"[quote]") liefert mir immer 0 als Ergebnis. Egal wie oft [quote] tatsächlich vorkommt. Habe auch bereits probiert, die eckigen Klammern mit Backslash zu maskieren, aber das hat auch keinen Erfolg gebracht.
Das ersetzen der [quote] tags mittels str_replace hingegen klappt hervorragend.
Eventuell habe ich einen Logikfehler auf den ich gerade nicht komme, aber wieviel kann man in einer einzigen Zeile schon falsch machen ..? :)
Für Tipps wäre ich sehr dankbar! ;)
viele Grüsse
Thomas.
Hi!
Ich programmiere gerade für mein Forum eine Quote-Funktion. Dabei möchte ich überprüfen, ob die Schachtelung der [quote]-Tags auch richtig ist. Habe mir gedacht, ich mache das mit strpos, aber das klappt nicht.
strpos() prüft keine Schachtelungen sondern gibt die Position des ersten Vorkommens des Suchstrings zurück, oder false wenn nichts gefunden wurde, was bei == leicht mit 0 verwechselt werden kann, deshalb sollte man das Ergebnis mit === vergleichen.
$qpos=strpos($threadtext,"[quote]") liefert mir immer 0 als Ergebnis. Egal wie oft [quote] tatsächlich vorkommt. Habe auch bereits probiert, die eckigen Klammern mit Backslash zu maskieren, aber das hat auch keinen Erfolg gebracht.
Eckige Klammern haben keine Sonderbedeutung. Ein davor gestellter Backslash steht für sich selbst.
Eine Kontrollausgabe (mit var_dump()) der beteiligten Variablen hast du gemacht? Das error_reporting auf E_ALL zu stellen hilft auch, (Tipp)fehler zu entlarven.
Eventuell habe ich einen Logikfehler auf den ich gerade nicht komme, aber wieviel kann man in einer einzigen Zeile schon falsch machen ..? :)
Zuerst solltest du erzählen, wie genau du dir die Schachtlungsprüfung vorgestellt hast. Zwischen "Schachtlungsprüfung" und "strpos()" ist ein ganz schöner Sprung in deiner Story.
Lo!
Ja, Du hast recht, also Ihr habt natürlich beide recht. Natürlich kam da noch eine Schleife hintendran mittels derer die Schachtelung durch Stacking von [quote] und [/quote] genau überprüft wird. Aber in die Schleife kam der Algo nie rein, denn nich hab vorher eben mittels strpos abgefragt ob überhaupt ein [quote] im Text ist.
Natürlich ist mir klar was strpos() macht, aber ich bin tatsächlich über den Sonderfall gestolpert, daß das erste [quote] an Position 0 war. Das habe ich nicht extra abgefragt und das war natürlich der Fehler. Manchmal ist man wirklich wie vernagelt. Naja, war auch sehr heiss heute ... *schwitz*
Grüsse und danke
Thomas.
$qpos=strpos($threadtext,"[quote]") liefert mir immer 0 als Ergebnis. Egal wie oft [quote] tatsächlich vorkommt.
Äh ja, die Häufigkeit des Vorkommens spielt auch überhaupt keine Rolle, sondern nur wo der gesuchte String steht.
Folgende Strings werden 0 ergeben:
[quote]foo
[quote][quote]foo[quote]bar
[quote]foo[quote]bar[quote]
Folgende Strings werden 1 ergeben:
.[quote]
o[quote]
Wie das beim escapen ist führe ich jetzt nicht aus (bzw. weiß ich auch gar nicht sooo genau).
Vielleicht ist dir nicht klar was strpos macht.