2011-01-08 11 views
2

Ich möchte einige Zeichen mit einer bestimmten Zeichenfolge außer einem div ersetzen. Hier ist mein str_replace:kein str_replace in einem Div-Tag

// smileys 
    $in = array(
     ':)', 
     ':D', 
     ':o', 
     ':p', 
     ':(', 
     ';)', 
     'xD', 
     '^^', 
    ); 
    $out = array(
     '<img alt=":)" style="padding-left:3px;" src="img/emoticons/emoticon_smile.png" />', 
     '<img alt=":D" style="padding-left:3px;" src="img/emoticons/emoticon_happy.png" />', 
     '<img alt=":o" style="padding-left:3px;" src="img/emoticons/emoticon_surprised.png" />', 
     '<img alt=":p" style="padding-left:3px;" src="img/emoticons/emoticon_tongue.png" />', 
     '<img alt=":(" style="padding-left:3px;" src="img/emoticons/emoticon_unhappy.png" />', 
     '<img alt=";)" style="padding-left:3px;" src="img/emoticons/emoticon_wink.png" />', 
     '<img alt="xD" style="padding-left:3px;" src="img/emoticons/emoticon_evilgrin.png" />', 
     '<img alt="^^" style="padding-left:3px;" src="img/emoticons/emoticon_happy.png" />' 
    ); 
    $text = str_replace($in, $out, $text); 

Der var $ Text kann <div class="code-geshi"></div> haben, aber ich ddon't die str_replace wollen für Smileys in gehen Wie kann ich das tun.?

Thanks :)

PS: Sorry für mein schlechtes Englisch ...

+0

Wenn '$ Text' enthält Markup Sie sollten einen [DOM-Parser] (http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) verwenden und nur Ihren 'str_replace' auf den Textknoten des Dokuments ausführen verhindern Sie versehentliches Ersetzen in Elementattributen. – Gordon

Antwort

0

Sie können dies mit str_replace nicht tun. Verwenden Sie preg_replace!

+0

Ok, kannst du mir ein Beispiel geben? Danke. – CrazyMax

+0

[Aus dem Handbuch] (http://www.php.net/manual/en/regexp.reference.assertions.php): '(? rik

0

Ich habe einen anderen Weg verwendet. In meiner Funktion, die analysieren Code:

$text = preg_replace_callback('/\[code\="?(.*?)"?\](.*?)\[\/code\]/ms', "gen_geshi", $text); 

ich die möglichen Smileys ersetzen durch Hinzufügen von Zeichen:

if (!function_exists('gen_geshi')) { 
     function gen_geshi($s){ 
      global $text; 
      $result = ""; 
      $list_languages = array('html4strict', 'php', 'javascript', 'css'); 
      $name_languages = array(
       'html4strict' => 'HTML', 
       'php'   => 'PHP', 
       'javascript' => 'Javascript', 
       'css'   => 'CSS' 
      ); 
      $text = strip_tags($text); 
      $language = $s[1]; 
      $code = $s[2]; 

      $smileys_in = array(
       ':)', 
       ':D', 
       ':o', 
       ':p', 
       ':(', 
       ';)', 
       'xD', 
       '^^', 
      ); 
      $smileys_out = array(
       '**-|-**:**-|-**)**-|-**', 
       '**-|-**:**-|-**D**-|-**', 
       '**-|-**:**-|-**o**-|-**', 
       '**-|-**:**-|-**p**-|-**', 
       '**-|-**:**-|-**(**-|-**', 
       '**-|-**;**-|-**)**-|-**', 
       '**-|-**x**-|-**D**-|-**', 
       '**-|-**^**-|-**^**-|-**', 
      ); 

      $code = str_replace($smileys_in, $smileys_out, $code); 

      if(in_array($language, $list_languages) && !empty($code)){ 
       global $lang; 
       $code = trim(preg_replace('#\t#', ' ', $code)); 
       if (!class_exists('GeSHi')) include('inc/geshi/geshi.php'); 
       $geshi = new GeSHi($code, $language); 
       $geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS); 
       $result = '<div class="code-geshi-overall">' . $lang->get['global']['code'] . ' ' . $name_languages[$language] . ' : </div><div class="code-geshi">' . $geshi->parse_code() . '</div>'; 
      } 

      return $result; 
     } 
    } 

Und dann habe ich ein str_replace:

$text = str_replace('**-|-**', '', $text);