Ergebnis 1 bis 6 von 6

Thema: Smilies-Funktion

  1. #1
    Kaiserliche Hoheit Avatar von vbtricks
    Registriert seit
    26.12.2005
    Beiträge
    1.586
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard Smilies-Funktion

    Salut,

    ich versuche gerade, Smilies auf meiner Seite zu integrieren, dafür habe ich folgende Funktion geschrieben:
    Code:
     function dosmilies($text) {
       $smiliessemicolon = array(";)" => "smilie03.gif",
        ";-)" => "smilie03.gif");
      
       // lower case for keys!
       $smiliesdot = array(":)" => "smilie0 1.gif",
        ":-)" => "smilie0 1.gif",
        ">:)" => "smilie04.gif",
        ">:-)" => "smilie04.gif",
        ":devil:" => "smilie04.gif",
        ":p" => "smilie06.gif",
        ":-p" => "smilie06.gif",
        ":d" => "smilie02.gif",
        ":-d" => "smilie02.gif",
        ":-(" => "smilie05.gif",
        ":(" => "smilie05.gif",
        ":o)" => "smilie07.gif",
        ":o" => "smilie07.gif"
       );
       
       $pos = strpos($text, ":", 0);
       while($pos != false) {
         //$pos2 = strrpos&#40;$text, "<pre>", $pos&#41;;
         //if&#40;&#40;$pos2 == false&#41; || &#40;strrpos&#40;$text, "</pre>"&#41; > $pos2&#41;&#41;
         //&#123;
           reset&#40;$smiliesdot&#41;;
           while &#40;list &#40;$key, $val&#41; = each &#40;$smiliesdot&#41;&#41;
           &#123;
             if&#40;strtolower&#40;substr&#40;$text, $pos, strlen&#40;$key&#41;&#41;&#41; == $key&#41; &#123;
               $temp = "<img src=\"img/smilies/".$val."\" border=\"0\" alt=\"$key\" />";
               $text = substr&#40;$text, 0, $pos&#41;.$temp.substr&#40;$text, $pos + strlen&#40;$key&#41;&#41;;
               $pos += strlen&#40;$temp&#41;;
               break;
             &#125;
           &#125;
         //&#125;
         $pos = strpos&#40;$text, "&#58;", $pos + 1&#41;;
       &#125;
       return $text;
    &#125;
    Diese ersetzt aber natürlich im gesamten Text die entsprechenden Kürzel durch die Bilder. Zwischen den Anfangs- und End-Tags von <pre> und <input> möchte ich das aber verhindern.

    Also wollte ich die auskommentierten Zeilen einfügen. Bei der ersten erhalte ich aber den Fehler, dass zu viele Parameter angegeben seien. Scheinbar unterstützt meine PHP-Version (4.4) noch nicht den offset-Parameter.

    Daher meine Frage: Wie kann ich anders rückwärts suchen (bleibt mir nur die manuelle Version mit einer Schleife) oder gibt es gar eine weitaus effizientere Möglichkeit, die Smilies zu ersetzen?


    Danke im Voraus,

    Stefan
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!
    Farben richtig wählen: ColorBlender
    Website validieren: W3C Markup Validation Service
    Meine Website: vbtricks
    Kleines Snake zwischendurch?

  2. #2
    Kaiser(in)
    Registriert seit
    09.12.2005
    Alter
    29
    Beiträge
    2.496
    Danke
    1
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    du musst den text am besten unterteilen
    zB mit
    $erg = split('\</?pre\>', $text);
    dann kannste noch mit einer foreach schleife smilies ersetzen/nicht ersetzen lassen
    Sei immer du selbst. Außer du kannst Batman sein. Sei immer Batman!

  3. #3
    Kaiserliche Hoheit
    Registriert seit
    15.07.2005
    Ort
    Hagen (NRW)
    Beiträge
    1.515
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    ...änder auch noch while($pos != false) in while($pos !== false)
    Zoggerforum.de Betreuer * Mod @ ibforen.de * Admin @ daoc-ds.de
    ICQ Nummer kann via PN erfragt werden

  4. #4
    Kaiserliche Hoheit
    Themenstarter
    Avatar von vbtricks
    Registriert seit
    26.12.2005
    Beiträge
    1.586
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Salut,

    @Modula
    erst habe ich mich ja gefragt, wieso, aber inzwischen ist es mir klar. Sonst wird die Schleife nämlich nie ausgeführt.

    @Bendor:
    Wenn es sich nur um einen Tag handeln würde, wäre das eine praktikable Lösung. Leider habe ich noch mehr Tags, das war aus meinem Post aber auch nicht ersichtlich.

    Folgendes ist jetzt meine Lösung:
    Code:
     function dosmiliestextpart&#40;$text, $smiliesdot, $smiliessemicolon&#41; &#123;
       $pos = strpos&#40;$text, "&#58;", 0&#41;;
       while&#40;$pos != false&#41; &#123;
         reset&#40;$smiliesdot&#41;;
         while &#40;list &#40;$key, $val&#41; = each &#40;$smiliesdot&#41;&#41;
         &#123;
           if&#40;strtolower&#40;substr&#40;$text, $pos, strlen&#40;$key&#41;&#41;&#41; == $key&#41; &#123;
             $temp = "<img src=\"img/smilies/".$val."\" border=\"0\" alt=\"$key\" />";
             $text = substr&#40;$text, 0, $pos&#41;.$temp.substr&#40;$text, $pos + strlen&#40;$key&#41;&#41;;
             $pos += strlen&#40;$temp&#41;;
             break;
           &#125;
         &#125;
         $pos = strpos&#40;$text, "&#58;", $pos + 1&#41;;
       &#125;
       
       $pos = strpos&#40;$text, ";", 0&#41;;
       while&#40;$pos != false&#41; &#123;
         reset&#40;$smiliessemicolon&#41;;
         while &#40;list &#40;$key, $val&#41; = each &#40;$smiliessemicolon&#41;&#41;
         &#123;
           if&#40;substr&#40;$text, $pos, strlen&#40;$key&#41;&#41; == $key&#41; &#123;
             $temp = "<img src=\"img/smilies/".$val."\" border=\"0\" alt=\"$key\" />";
             $text = substr&#40;$text, 0, $pos&#41;.$temp.substr&#40;$text, $pos + strlen&#40;$key&#41;&#41;;
             $pos += strlen&#40;$temp&#41;;
             break;
           &#125;
         &#125;
         $pos = strpos&#40;$text, ";", $pos + 1&#41;;
       &#125;
       return $text; 
     &#125;
     
     function dosmilies&#40;$text&#41; &#123;
       $smiliessemicolon = array&#40;";&#41;" => "smilie03.gif",
        ";-&#41;" => "smilie03.gif"&#41;;
      
       // lower case for keys!
       $smiliesdot = array&#40;"&#58;&#41;" => "smilie 01.gif",
        "&#58;-&#41;" => "smilie 01.gif",
        ">&#58;&#41;" => "smilie04.gif",
        ">&#58;-&#41;" => "smilie04.gif",
        "&#58;devil&#58;" => "smilie04.gif",
        "&#58;p" => "smilie06.gif",
        "&#58;-p" => "smilie06.gif",
        "&#58;d" => "smilie02.gif",
        "&#58;-d" => "smilie02.gif",
        "&#58;-&#40;" => "smilie05.gif",
        "&#58;&#40;" => "smilie05.gif",
        "&#58;o&#41;" => "smilie07.gif",
        "&#58;o" => "smilie07.gif"
       &#41;;
       
       // 
       $tags = array&#40;"pre", "input"&#41;;
       
       $pos == 0;
       while&#40;$pos !== false&#41; &#123;
         $smallestpos = strlen&#40;$text&#41;;
         $smallestpostag = "";
         // find the first occurance of one of the $tags
         for&#40;$i = 0; $i < count&#40;$tags&#41;; $i++&#41;
         &#123;
           $pos2 = strpos&#40;$text, "<".$tags&#91;$i&#93;, $pos&#41;;
           if&#40;&#40;$pos2 > 0&#41; && &#40;$pos2 < $smallestpos&#41;&#41; &#123;
            $smallestpos = $pos2;
            $smallestpostag = $tags&#91;$i&#93;;
           &#125;
         &#125;
         $temp = substr&#40;$text, $pos, $smallestpos - $pos&#41;;
         $new = dosmiliestextpart&#40;$temp, $smiliesdot, $smiliessemicolon&#41;;
    
         $text = substr&#40;$text, 0, $pos&#41;.$new.substr&#40;$text, $smallestpos&#41;;
         if&#40;$smallestpostag == ""&#41; &#123;
           $pos = false;
         &#125;
         else &#123;
           $pos = $pos + strlen&#40;$new&#41;;
           $pos3 = strpos&#40;$text, "/>", $pos&#41;;
           $pos4 = strpos&#40;$text, "<", $pos&#41;;
           if&#40;&#40;$pos3 != false&#41; && &#40;$pos3 < $pos4&#41;&#41; &#123;
             $pos = $pos4 + 2;
           &#125;
           else &#123;
             $pos = strpos&#40;$text, "</".$smallestpostag, $pos&#41;;
           &#125;
         &#125;
       &#125;
       return $text;
     &#125;
    Stefan
    Farben richtig wählen: ColorBlender
    Website validieren: W3C Markup Validation Service
    Meine Website: vbtricks
    Kleines Snake zwischendurch?

  5. #5
    Kaiserliche Hoheit
    Registriert seit
    15.07.2005
    Ort
    Hagen (NRW)
    Beiträge
    1.515
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    vbtricks, um in PHP einen Vergleich auf boolscher Ebene durchzuführen muss man === bzw. !== verwenden.
    Zoggerforum.de Betreuer * Mod @ ibforen.de * Admin @ daoc-ds.de
    ICQ Nummer kann via PN erfragt werden

  6. #6
    Kaiserliche Hoheit
    Themenstarter
    Avatar von vbtricks
    Registriert seit
    26.12.2005
    Beiträge
    1.586
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Salut,

    ja, ich weiß. Verwende ich nur "==", konvertiert PHP. Und 0 entspricht dann gerade false.

    Normalerweise programmiere ich mit C#, da hab ich solche Probleme mit der Typensicherheit nicht.


    Stefan
    Farben richtig wählen: ColorBlender
    Website validieren: W3C Markup Validation Service
    Meine Website: vbtricks
    Kleines Snake zwischendurch?

Ähnliche Themen

  1. Suche eine Funktion wie bei VBA die Controls Funktion
    Von OJMD im Forum Forum für alle anderen Programmiersprachen
    Antworten: 2
    Letzter Beitrag: 28.06.2007, 09:08
  2. Wert aus JS-Funktion an PHP-Funktion übergeben
    Von Agnes im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 17
    Letzter Beitrag: 18.05.2007, 22:53
  3. Smilies
    Von Stubi im Forum Forum für Grafiken und Bildbearbeitung
    Antworten: 3
    Letzter Beitrag: 04.09.2006, 09:15
  4. Smilies
    Von xXx_BaSStar_xXx im Forum Forum-Hilfe.de intern
    Antworten: 12
    Letzter Beitrag: 12.12.2005, 16:23
  5. Smilies
    Von Tidus im Forum HTML & CSS Forum
    Antworten: 3
    Letzter Beitrag: 30.04.2004, 01:24

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •