1

すべての体に平安がありますように

テキストの感情を画像に置き換えることについて検索しました

sultion が見つかりましたが、問題があります

    <?php
     function emoticons($text) {
             $icons = array(
                     ':)'    =>  '<img src="/images/blank.gif" alt="smile" class="emo1" />',
                     ':-)'   =>  '<img src="/images/blank.gif" alt="smile" class="emo2" />',
                     ':/'    =>  '<img src="/images/blank.gif" alt="smile" class="emo3" />',
              );
            return strtr($text, $icons);
     }

     echo "http://stackoverflow.com good site:) :-)";

     ?>

それは出力します:(私はそれを作りたくありません)

     "http<img src="/images/blank.gif" alt="smile" class="emo3" />/stackoverflow.com good site<img src="/images/blank.gif" alt="smile" class="emo1" /> <img src="/images/blank.gif" alt="smile" class="emo2" />"

出力したい

     "http://stackoverflow.com good site:) <img src="/images/blank.gif" alt="smile" class="emo2" />"

テキストの前後にスペースを入れてから置き換える必要があると思います

これと同じ別の質問では、正しい答えは

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

しかし、私はそれを使用しましたが、結果には画像がありません

私を助けてください、stackoverflow && allに感謝します:)

アップデート :

私は機能を修正してうまくいきましたが、チャットメッセージで使用する場合はあなたの意見を聞きたいですか? または問題に直面しますか?

      function emoticons($text) {
           $icons = array(
                          ':)'    =>  '<img src="/images/blank.gif" class="emo1"/>',
                          ':-)'   =>  '<img src="/images/blank.gif" class="emo1"/>',
                          ':/'   =>  '<img src="/images/blank.gif" class="emo3"/>',
                     );   
            $text = " ".$text." ";       
            foreach ($icons as $search => $replace){
             $text = str_replace(" ".$search." ", " ".$replace." ", $text);
            }
           return trim($text);
      }

      $str = ":)http://stackoverflow.com good site:) :-)";
      echo emoticons($str);
4

3 に答える 3

3

リストに追加するだけです://

'://' => '://',

そして、同じ文字列に置き換えます。

最初に最も長いキーを置き換えるためstrtr、URL は影響を受けません


スペースで始まるアイコンのみを置き換えたい場合は、正規表現を試すことができます。

foreach($icons as $icon => $image)              
  $text = preg_replace('#(?:^|\s)(' . preg_quote($icon) . ')(?:\s|$)#', $image, $text);

これは、スペース / が先行するアイコン、または文字列の先頭にあり、スペース / が後続するアイコン、または文字列の末尾にあるアイコンと一致します。

しかし、なぜそれが必要なのかわかりません。テキストのようなものfoo:)もスマイリーと見なす必要があります。参考までに、絵文字の前にスペースを追加することはほとんどありません:)

于 2013-01-29T23:04:09.707 に答える
2

これはどうですか。文字列の先頭またはスペースの後にある場合にのみ置き換えられます。

function emoticons($text) {
    $icons = array(
        ':)'    =>  '<img src="/images/blank.gif" alt="smile" class="emo1" />',
        ':-)'   =>  '<img src="/images/blank.gif" alt="smile" class="emo2" />',
        ':/'    =>  '<img src="/images/blank.gif" alt="smile" class="emo3" />',
    );

    foreach ($icons as $search => $replace)
        $text = preg_replace("#(?<=\s|^)" . preg_quote($search) . "#", $replace, $text);

    return $text;
}

$str = "http://stackoverflow.com good site:) :-)";

echo emoticons($str);

出力:

http://stackoverflow.com good site:) <img src="/images/blank.gif" alt="smile" class="emo2" />
于 2013-01-29T23:33:12.243 に答える
1

次のように ' を " に置き換えてみてください。

':)' => "<img src="/images/blank.gif" alt="smile" class="emo1" />",

うまくいかない場合は、これを試してください:

":)" => '<img src="/images/blank.gif" alt="smile" class="emo1" />',

于 2013-01-29T23:00:01.943 に答える