Problem mit PHP str_replace

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit PHP str_replace

    Hallo zusammen,


    ich habe ein Problem mit einem PHP-Script und hoffe das mir vielleicht jemand von euch weiterhelfen kann. Ich benutze in meinem Script zusätzlich ein Javascript um Zeichen in ein PHP Textfeld zu übergeben, genau wie hier im Forum mit den Smilies.

    <script language="JavaScript">
    <!--
    function SmilieEinfuegen(Smilie)
    {
    document.Formular.posting.value+=Smilie+" ";
    document.Formular.posting.focus();
    }
    //-->
    </script>

    mit dem Javascript Link:

    <a href=\"javascript:SmilieEinfuegen(':smile:')\"><img border=\"0\" src=\"../../images/smilies/smile.gif\"></a>

    Im PHP Code habe ich folgende Zeile stehen um das Zeichenkürzel anschließend durch die Bild-URL zu ersetzen.


    PHP-Code:
    $HTTP_POST_VARS['posting'] = str_replace(":smile:""<img src&equal;\"../../images/smilies/1.gif\">"$HTTP_POST_VARS['posting']); 
    Nun kommts . Alles läuft einwandfrei solange man den Text mit jeweils einem Smilie abschickt. Sobald es mehr sind werden die Bilder im anschließenden Text nicht mehr angezeigt. Als ich mir den HTML output im Browser ansah bemerkte ich, das die Bild URL bei allen fehlerhaften Bildern ein Leerzeichen beinhaltete. Die URL's sahen nacheinander so aus:

    <img src="../../images/smilies/1.gi f"> <img src="../../images/smilies/2.gi f"> usw...

    während der abgespeicherte Code so aussieht:

    &lt;img src&____equal;&quot;../../images/smilies/1.gif&quot;&gt;

    Interessant ist hier, das aus mir unbegreiflichen Gründen amp; neben das src& wo die Linie sich befindet, gesetzt wurde! Ich mußte es hier seperat schreiben, da es im Posting sonst nicht erscheinen würde. Da ich PHP erst seit sehr kurzer Zeit kenne, weiß ich nicht wo das Problem liegen könnte und speziell warum dies nur bei mehr als einem Smilie passiert ?
    Im voraus schon mal vielen Dank für eure Hilfe!
    Zuletzt geändert von StarShaper; 05.08.2004, 02:58.

  • #2
    hmm,

    das beschriebene verhalten kann ich nicht nachvollziehen (glaubs ja nicht mal ^^).

    aber was anderes: ersetz die smilies erst bei der ausgabe! nicht, wenn sie gePOSTet werden ... und $HTTP_POST_VARS entstammt doch auch den älteren versionen ...

    und warum benutz du &amp;equal; im ersatz?

    mach mal vor und nach der ersetzung
    PHP-Code:
    echo $HTTP_POST_VARS['posting'
    und poste mal bitte die ausgaben, den erzeugten html-quellcode ...
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      Hallo derHund,

      das beschriebene verhalten kann ich nicht nachvollziehen (glaubs ja nicht mal ^^).
      So geht es mir auch!

      Habe nun die Smilies erst bei der Ausgabe ersetzt. Das Problem ist dasselbe. Ich habe beim ersten mal &equal; benutzt, da dies anschließend beim Posting wieder durch "=" ersetzt wird. Es hängt ganz davon ab ob ich HTML beim Posting erlaube oder nicht.

      Der Code sieht so aus:
      PHP-Code:
      $posting[1] = str_replace(":confuse:""<img src=\"../../images/smilies/2.gif\">"$posting[1]); 
      anschließend folgt die Ausgabe:
      PHP-Code:
      echo $posting[1]; 
      Die Ausgabe hatte ich schon gepostet. Der Seitenquellcode der Smilies sieht so aus:

      <font color="#ffffff"> <img src="../../images/smilies/1.gi f"> <img src="../../images/smilies/2.gi f"> </a>

      Wie man sieht wird die gif-Endung durch ein Space getrennt (die Tags, dies ist aber egal, > < ebenfalls). Deshalb erscheint auch das Bild nicht. Warum das so ist weiß ich nicht, nur das es so ist.

      Zusatz: Das Problem tritt immer noch nur dann auf wenn mehr als ein Smilie im Posting vorkommt. 1 einziger wird korrekt angezeigt!

      cu
      Zuletzt geändert von StarShaper; 05.08.2004, 13:52.

      Kommentar


      • #4
        und was erhältst du hier?
        PHP-Code:
        <?php
        $posting 
        'bla bla :confuse::confuse::confuse: bla bla';
        $posting str_replace(":confuse:""<img src=\"../../images/smilies/2.gif\">"$posting);
        echo 
        $posting;
        ?>

        Kommentar


        • #5
          Die Lösung



          Ich habe die Lösung des Problems gefunden. Ich hatte eine Zeile im Script überlesen.

          Nämlich diese:
          PHP-Code:
          if( strlen($posting[1]) >= 50
          PHP-Code:
          echo wordwrap($posting[1],30," ",1); 
          Zeichenketten die länger als 50 sind werden ...

          Nun funktioniert alles problemlos!

          Trotzdem Danke an derHund und an asp2php!

          cu
          Zuletzt geändert von StarShaper; 05.08.2004, 14:01.

          Kommentar

          Lädt...
          X