0

私はこの機能を持っています:

  function bb_parse($string) {
        $string = $this->quote($string);
            $string=nl2br($string);
        $string = html_entity_decode(stripslashes(stripslashes($string)));
            $tags = 'b|i|u';
            while (preg_match_all('`\[('.$tags.')=?(.*?)\](.+?)\[/\1\]`', $string, $matches)) foreach ($matches[0] as $key => $match) {
                list($tag, $param, $innertext) = array($matches[1][$key], $matches[2][$key], $matches[3][$key]);
                switch ($tag) {
                    case 'b': $replacement = "<strong>$innertext</strong>"; break;
                    case 'i': $replacement = "<em>$innertext</em>"; break;
                    case 'u': $replacement = "<u>$innertext</u>"; break;
                          }
                $string = str_replace($match, $replacement, $string);
            } 

            return $string;
        }

ご覧のとおり、太字、斜体、下線付きのBBCodeを簡単に作成できます。ただし、この関数にもスマイリーを追加しようとしていますが、運がありません。

$ tagsに:)を追加してから、ケースにスマイリー:) imgを追加しようとしましたが、うまくいきませんでした。

どうすればよいので、これにスマイリーを追加することもできますか?

前もって感謝します。

4

2 に答える 2

1

単純なstr_replaceを実行する関数を作成するだけです。

<?php

function smilies( $text ) {
    $smilies = array(
        ';)' => '<img src="wink.png" />',
        ':)' => '<img src="smile.png" />'
    );

    return str_replace( array_keys( $smilies ), array_values( $smilies ), $text );
}

$string = '[b]hello[/b] smile: :)';

echo smilies( bb_parse( $string ) );
于 2012-04-23T07:03:54.500 に答える
0

http://php.net/manual/en/function.preg-quote.php

スマイリータグをエスケープする必要があります。

 $tags = 'b|i|u|'.preg_quote(":)");
于 2012-04-23T07:08:23.153 に答える