2

som chars を div 以外の特定の文字列に置き換えたい。これが私の 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);

var $text は持つこと<div class="code-geshi"></div>ができますが、スマイリーの str_replace を入れたくありません。どうすればできますか?

ありがとう :)

PS: 下手な英語で申し訳ありません...

4

2 に答える 2

0

これは str_replace では実行できません。preg_replaceを使用してください。

于 2011-01-08T21:45:06.367 に答える
0

私は別の方法を使用しました。コードを解析する私の関数では:

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

chars を追加して、潜在的なスマイリーを置き換えます。

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 = str_replace('**-|-**', '', $text);
于 2011-01-09T02:33:17.633 に答える