【问题标题】:php - Replace emoticons in string with imagesphp - 用图像替换字符串中的表情符号
【发布时间】:2014-01-22 10:19:37
【问题描述】:
  1. 多个快捷键
  2. 没有换行
  3. 没有循环

    function smilies($string)
        {
            $emote = array(':)', ':(', ':P', ':D' , '^_^', ';)', ':3', ':*', '<3' );
    
    
            $emote_replace = array(
                '<img title=":)" class="emote_img" src="/public/img/blank.gif" style="background-position: 0px;" >',
                '<img title=":(" class="emote_img" src="/public/img/blank.gif" style="background-position: -16px;" >',
                '<img title=":P" class="emote_img" src="/public/img/blank.gif" style="background-position: -31px;" >',
                '<img title=":D" class="emote_img" src="/public/img/blank.gif" style="background-position: -46px;" >',
                '<img title="^_^" class="emote_img" src="/public/img/blank.gif" style="background-position: -239px;" >',
                '<img title=";)" class="emote_img" src="/public/img/blank.gif" style="background-position: -79px;" >',
                '<img title=":3" class="emote_img" src="/public/img/blank.gif" style="background-position: -319px;" >',
                '<img title=":*" class="emote_img" src="/public/img/blank.gif" style="background-position: -208px;" >',
                '<img title="<3" class="emote_img" src="/public/img/blank.gif" style="background-position: -224px;" >',
            );
    
    
                return str_replace($emote, $emote_replace, $string);
            }
    

我想替换 :p:P 而不向 $emote_replace 和 ;(:' 添加新行( (这是cry的fb快捷键)

【问题讨论】:

    标签: php str-replace emoticons


    【解决方案1】:

    您可以使用正则表达式忽略大小写(使用循环创建第一个数组可能更简单):

    function smilies($string) {
        $emote = array(
            '/'.preg_quote(':)').'/i',
            '/'.preg_quote(':(').'/i',
            '/'.preg_quote(':P').'/i',
            '/'.preg_quote(':D').'/i',
            '/'.preg_quote('^_^').'/i',
            '/'.preg_quote(';)').'/i',
            '/'.preg_quote(':3').'/i',
            '/'.preg_quote(':*').'/i',
            '/'.preg_quote('<3').'/i'
        );
    
        $emote_replace = array(
            '<img title=":)" class="emote_img" src="/public/img/blank.gif" style="background-position: 0px;" >',
            '<img title=":(" class="emote_img" src="/public/img/blank.gif" style="background-position: -16px;" >',
            '<img title=":P" class="emote_img" src="/public/img/blank.gif" style="background-position: -31px;" >',
            '<img title=":D" class="emote_img" src="/public/img/blank.gif" style="background-position: -46px;" >',
            '<img title="^_^" class="emote_img" src="/public/img/blank.gif" style="background-position: -239px;" >',
            '<img title=";)" class="emote_img" src="/public/img/blank.gif" style="background-position: -79px;" >',
            '<img title=":3" class="emote_img" src="/public/img/blank.gif" style="background-position: -319px;" >',
            '<img title=":*" class="emote_img" src="/public/img/blank.gif" style="background-position: -208px;" >',
            '<img title="<3" class="emote_img" src="/public/img/blank.gif" style="background-position: -224px;" >',
        );
    
        return preg_replace($emote, $emote_replace, $string);
    }
    

    【讨论】:

    • 这将修复 :p 和 :P 但是不同版本的表情符号,比如 :O :-O 而不会在 $emote_replace 中添加新行,因为是重复的
    【解决方案2】:

    只需将str_replace 更改为str_ireplace。这是str_replace 的不区分大小写版本。

    【讨论】:

    • 这将修复 :p 和 :P 但是不同版本的表情符号,比如 :O :-O 而不会在 $emote_replace 中添加新行,因为是重复的
    • 如果不真诚地在您的代码中添加新内容,我想不出办法来做到这一点......
    【解决方案3】:

    我修改了sebcap26的功能

    <?php
    function smilies($string) {
      $emote = array(
        '/([:][-]?[)])/i', //:) or :-)
        '/([:][-]?[(])/i', //:( or :-(
        '/([:][-]?[P])/i', //:p or :P or :-p or :-P
        '/([:][-]?[D])/i', //:d or :D or :-d or :-D
        '/([^][-]?[^])/i', //^^ or ^-^
        '/([;][-]?[)])/i', //;) or ;-)
        '/'.preg_quote(':3').'/i',
        '/'.preg_quote(':*').'/i',
        '/'.preg_quote('<3').'/i'
      );
    
      $emote_replace = array(
        '<img title=":)" class="emote_img" src="/public/img/blank.gif" style="background-position: 0px;" >',
        '<img title=":(" class="emote_img" src="/public/img/blank.gif" style="background-position: -16px;" >',
        '<img title=":P" class="emote_img" src="/public/img/blank.gif" style="background-position: -31px;" >',
        '<img title=":D" class="emote_img" src="/public/img/blank.gif" style="background-position: -46px;" >',
        '<img title="^_^" class="emote_img" src="/public/img/blank.gif" style="background-position: -239px;" >',
        '<img title=";)" class="emote_img" src="/public/img/blank.gif" style="background-position: -79px;" >',
        '<img title=":3" class="emote_img" src="/public/img/blank.gif" style="background-position: -319px;" >',
        '<img title=":*" class="emote_img" src="/public/img/blank.gif" style="background-position: -208px;" >',
        '<img title="<3" class="emote_img" src="/public/img/blank.gif" style="background-position: -224px;" >',
      );
    
      return preg_replace($emote, $emote_replace, $string);
    }
    ?>
    

    我更改了第一个的正则表达式以涵盖它可能出现“-”(hiphen)的情况,将其设置为可选。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      相关资源
      最近更新 更多