2011-01-08 16 views
2

divを除く特定の文字列にsomの文字を置きたいと思います。変数$テキストが<div class="code-geshi"></div>を持つことができますが、私はそれを行うことができますどのようにスマイリーが に行くために私はstr_replaceをしたいddon'tdivタグのstr_replaceがありません

// 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); 

:ここ は私のstr_replaceのですか?

感謝:)

PS:私の悪い英語のため申し訳ありません...

+0

を[DOM parser](http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662)を使用し、ドキュメントのテキストノードに対してのみ 'str_replace'を実行する必要があります。エレメントの属性を誤って置き換えるのを防ぎます。 – Gordon

答えて

0

あなたはstr_replaceでこれを行うことはできません。 preg_replaceを使用してください!

+0

よろしくお願いしますか?どうも。 – CrazyMax

+0

[マニュアルから](http://www.php.net/manual/en/regexp.reference.assertions.php): '(?<!foo)bar'は、 「foo」が前に付いています。 – rik

0

私は別の方法で使用しました。コードを解析し、私の機能では:

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

私は文字を追加することにより、潜在的なスマイリー置き換える:

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; 
     } 
    } 

をし、私はstr_replaceを使用します。$ text`は、マークアップが含まれている `場合

$text = str_replace('**-|-**', '', $text); 
関連する問題