2011-01-08 5 views
2

div가 아닌 특정 문자열로 som 문자를 대체하고 싶습니다. var에의 $ 텍스트가 <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) :'(? rik

0

다른 방법으로 사용했습니다.

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 = preg_replace_callback('/\[code\="?(.*?)"?\](.*?)\[\/code\]/ms', "gen_geshi", $text); 

내가 추가 문자에 의해 잠재적 인 스마일을 대체 : $의 텍스트 '가 마크 업을 포함

$text = str_replace('**-|-**', '', $text); 
관련 문제