PHP中带有某些条件的表情符号替换

PHP中带有某些条件的表情符号替换,php,html,regex,preg-replace,Php,Html,Regex,Preg Replace,我正在寻找替换php中表情符号的方法,下面是我的代码 function emotify($text) { $icons = array( '3:)' => '<li class="emoti emoti55"></li>', 'O:)' => '<li class="emoti emoti54"></li>', ':)' => '<li class="

我正在寻找替换php中表情符号的方法,下面是我的代码

function emotify($text)
{
    $icons = array(
        '3:)'   =>  '<li class="emoti emoti55"></li>',
        'O:)'   =>  '<li class="emoti emoti54"></li>',
        ':)'   =>  '<li class="emoti emoti00"></li>',
        '>:('   =>  '<li class="emoti emoti19"></li>',
        ':('   =>  '<li class="emoti emoti01"></li>',
        ':P'   =>  '<li class="emoti emoti14"></li>',
        '=D'   =>  '<li class="emoti emoti08"></li>',
        '>:o'   =>  '<li class="emoti emoti18"></li>',
        ':o'   =>  '<li class="emoti emoti15"></li>',
        ';)'   =>  '<li class="emoti emoti04"></li>',
        ':/'   =>  '<li class="emoti emoti03"></li>',
        ':\'('   =>  '<li class="emoti emoti05"></li>',
        '^_^'   =>  '<li class="emoti emoti18"></li>',
        'B|'   =>  '<li class="emoti emoti09"></li>',
        '<3'   =>  '<li class="emoti emoti65"></li>',
        '-_-'   =>  '<li class="emoti emoti40"></li>',
        'o.O'   =>  '<li class="emoti emoti10"></li>',
        '(y)'   =>  '<li class="emoti emoti81"></li>',
        );
    return str_replace(array_keys($icons), array_values($icons), $text);
}

//test work well
echo emotify(":) :( :P =D :o ;) :v >:( :/ :'( ^_^ 8-) B| <3 3:) O:) -_- o.O >:o :3 (y) ");
函数表情($text)
{
$icons=数组(
“3:)”=>”
  • , “O:)”=>”
  • , “:)”=>”
  • , “>:”(“=>”
  • ”, “:(“=>”
  • ”, “:P'=>”
  • ”, '=D'=>'
  • , '>:o'=>'
  • , “:o'=>”
  • ”, “;)”=>”
  • , “:/”=>”
  • , “:\”(“=>”
  • ”, “^^^”=>”
  • , “B |”=>”

  • “如果您想保持strtr的速度优势(这是翻译文本字符串的最快方法(字符串对于所有键/值只解析一次)),可以分三次进行

    第一步是用占位符替换要保护的内容。例如:

    $protected = array('http://'  => '#!#0#!#',
                       'https://' => '#!#1#!#',
                       'ftp://'   => '#!#2#!#', // etc.
    );
    $str = strtr($str, $protected);
    
    请注意,
    $protected
    的构建可以从
    数组('http://'、'https://'、'ftp://'、…);

    第二步,使用阵列:

    $str = strtr($str, $icons);
    
    第三步,替换占位符:

    $str = strtr($str, array_flip($protected));
    

    即使需要三次传递,结果也比使用
    preg_replace
    要快得多,它将为每个键/值解析字符串一次。

    不仅是链接,而且这也是
    aaa:/aaa
    :/aaa
    aaa:///code>不想replace@Marcus当前位置的想法是存储这些特定的
    $protected
    中的案例。这些案例显然是有限的,因此不难识别它们并为每个案例定义占位符。