2014-01-22 2 views
0
  1. несколько сочетаний клавиш
  2. без новых линий
  3. без петельPHP - Заменить смайликов в строке с изображениями

    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 без добавления новых строк в $ emote_replace и для ; ( a й : '( (это фб ярлык для крика)

ответ

0

Вы можете игнорировать дело с регулярными выражениями (создание первого массива может быть проще с петлей):

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); 
} 
+0

Это будет исправлено: p и: P, но как насчет разной версии смайликов, таких как: O: -O без добавления новой строки в $ emote_replace, потому что дублируется – Ben

0

Просто изменить str_replace с str_ireplace. Это нечувствительная к регистру версия str_replace.

+0

Это исправит: p и: P, но как насчет другой версии из таких смайликов, как: O: -O, не добавляя новую строку в $ emote_replace, потому что это дубликат – Ben

+0

Я не могу придумать способ сделать это, не добавляя что-то новое в ваш код искренне ... – silentw

0

Я изменил функцию 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), поместите его в качестве факультативных.

Смежные вопросы