6

現在、私はこの関数を絵文字に使用しています。

function emoticons($text) {
        $icons = array(
                ':)'    =>  '<img src="/images/blank.gif" alt="smile" class="icon_smile" />',
                ':-)'   =>  '<img src="/images/blank.gif" alt="smile" class="icon_smile" />',
                ':D'    =>  '<img src="/images/blank.gif" alt="smile" class="icon_laugh" />',
                ':d'    =>  '<img src="/images/blank.gif" alt="laugh" class="icon_laugh" />',
                ';)'    =>  '<img src="/images/blank.gif" alt="wink" class="icon_wink" />',
                ':P'    =>  '<img src="/images/blank.gif" alt="tounge" class="icon_tounge" />',
                ':-P'   =>  '<img src="/images/blank.gif" alt="tounge" class="icon_tounge" />',
                ':-p'   =>  '<img src="/images/blank.gif" alt="tounge" class="icon_tounge" />',
                ':p'    =>  '<img src="/images/blank.gif" alt="tounge" class="icon_tounge" />',
                ':('    =>  '<img src="/images/blank.gif" alt="sad face" class="icon_sad" />',
                ':o'    =>  '<img src="/images/blank.gif" alt="shock" class="icon_shock" />',
                ':O'    =>  '<img src="/images/blank.gif" alt="shock" class="icon_shock" />',
                ':0'    =>  '<img src="/images/blank.gif" alt="shock" class="icon_shack" />',
                ':|'    =>  '<img src="/images/blank.gif" alt="straight face" class="icon_straight" />',
                ':-|'   =>  '<img src="/images/blank.gif" alt="straight face" class="icon_straight" />',
                ':/'    =>  '<img src="/images/blank.gif" alt="straight face" class="icon_straight" />',
                ':-/'   =>  '<img src="/images/blank.gif" alt="straight face" class="icon_straight" />'
        );
        return strtr($text, $icons);
    }

ただし、リンクを入力すると、の:/一部http://が置き換えられます。

ここに画像の説明を入力してください

コード(コードボックスを作成するために各行の前に4つのスペース)と同じですが、何らかの理由で単純なものも)(ウィンクに)置き換えられます:

ここに画像の説明を入力してください

このようなすべてのアイコンを置き換えるよりも、これに対するより良い解決策はありますか?明らかにうまくいきません。私はグーグルでたくさん検索しました、そして、より良い方法を見つけませんでした。また、上記の連想配列の各絵文字の前にスペースを入れてみましたが、前に何も付けずに:)を入力しただけでは機能しません。

4

5 に答える 5

12

preg_replace関数を使用してから、正規表現で単語の境界を使用できます。

 foreach($icons as $icon=>$image) {
      $icon = preg_quote($icon);
      $text = preg_replace("~\b$icon\b~",$image,$text);
 }

空白ではなく単語の境界を使用する必要があります。これにより、の開始点と終了点が処理されます。前にスペースが必要な場合は、:)だけが見つからないことを意味します。

于 2012-03-11T20:48:31.877 に答える
1

それが機能するかどうかはわかりませんが、次のような余分なスペースをいくつか入れてみます。

function emoticons($text) {
    $icons = array(
            ' :) '    =>  ' <img src="/images/blank.gif" alt="smile" class="icon_smile" /> ',
            ' :-) '   =>  ' <img src="/images/blank.gif" alt="smile" class="icon_smile" /> ',
            ' :D '    =>  ' <img src="/images/blank.gif" alt="smile" class="icon_laugh" /> ',
            ' :d '    =>  ' <img src="/images/blank.gif" alt="laugh" class="icon_laugh" /> ',
            ' ;) '    =>  ' <img src="/images/blank.gif" alt="wink" class="icon_wink" /> ',
            ' :P '    =>  ' <img src="/images/blank.gif" alt="tounge" class="icon_tounge" /> ',
            ' :-P '   =>  ' <img src="/images/blank.gif" alt="tounge" class="icon_tounge" /> ',
            ' :-p '   =>  ' <img src="/images/blank.gif" alt="tounge" class="icon_tounge" /> ',
            ' :p '    =>  ' <img src="/images/blank.gif" alt="tounge" class="icon_tounge" /> ',
            ' :( '    =>  ' <img src="/images/blank.gif" alt="sad face" class="icon_sad" /> ',
            ' :o '    =>  ' <img src="/images/blank.gif" alt="shock" class="icon_shock" /> ',
            ' :O '    =>  ' <img src="/images/blank.gif" alt="shock" class="icon_shock" /> ',
            ' :0 '    =>  ' <img src="/images/blank.gif" alt="shock" class="icon_shack" /> ',
            ' :| '    =>  ' <img src="/images/blank.gif" alt="straight face" class="icon_straight" /> ',
            ' :-| '   =>  ' <img src="/images/blank.gif" alt="straight face" class="icon_straight" /> ',
            ' :/ '    =>  ' <img src="/images/blank.gif" alt="straight face" class="icon_straight" /> ',
            ' :-/ '   =>  ' <img src="/images/blank.gif" alt="straight face" class="icon_straight" /> '
    );
    return strtr($text, $icons);
}
于 2012-03-11T21:17:04.723 に答える
1

テキストが大きい場合、正規表現は遅くなります。私が好きなように、アイコンはスペースで囲まれている場合にのみ挿入する必要があります。そうすれば、ユーザーがURLを書き込もうとしたときに暴動を起こすことはありません。

于 2012-03-11T21:00:38.730 に答える
1

2つのライブラリをお勧めします。

Emojify:https ://github.com/HallgrenNetworks/emojify

PHP絵文字:https ://github.com/iamcal/php-emoji

これらはあなたのためにこれらのケースに対処します。

于 2014-01-14T09:22:05.603 に答える
0

絵文字を定義するだけでなく、正規表現を使用すると思います。これは次のようになります

// replaces a :) when it is surrounded by whitespaces
return preg_replace('/\s:)\s/', '<img ...>', $text);
于 2012-03-11T20:53:43.813 に答える