用关键字替换字符串中的表情符号

时间:2011-10-26 14:41:07

标签: php preg-replace str-replace

大多数表情符号替换函数的结构如下:

array(
  ':-)' => 'happy', ':)' => 'happy', ':D' => 'happy', ...
)

对我而言,这似乎有点多余(特别是在我不需要区分'happy',例如:-)和非常高兴时,例如:-D。所以我想出了这个:

$tweet = 'RT @MW_AAPL: Apple officially rich :-) LOLWUT #ipod :(';

function emoticons($tweet) {
  $emoticons = array(
    'HAPPY' => array(':-)', ':-D', ':D', '(-:', '(:'),
    'SAD'   => array(':-(', ':('),
    'WINK'  => array(';-)', ';)'),
    );

  foreach ($emoticons as $emotion) {
    foreach ($emotion as $pattern) {
      $tweet = str_replace($pattern, key($emoticons), $tweet);
    }
  }

  return $tweet;
}

输出应为:

RT @MW_AAPL: Apple officially rich HAPPY LOLWUT #ipod SAD

但是,我不知道如何从$ emoticons调用正确的密钥。在我的代码中,似乎总是用关键字“HAPPY”替换任何表情符号。

(1)如果您发现我的代码有什么问题,请告诉我。任何帮助将不胜感激 :-) (2)我在这里使用str_replace,而我看到很多其他功能使用preg_replace。那有什么好处?

2 个答案:

答案 0 :(得分:2)

这应该足够了,利用str_replace接受任何前两个参数的数据这一事实:

foreach ($emoticons as $emot => $icons) {
    $tweet = str_replace($icons, $emot, $tweet);
}

<强> See it in action

答案 1 :(得分:1)

改变这个:

foreach ($emoticons as $emotion) {
    foreach ($emotion as $pattern) {
      $tweet = str_replace($pattern, key($emoticons), $tweet);
    }
}

到此:

foreach ($emoticons as $key => $emotion) {
      $tweet = str_replace($emotion, $key, $tweet);
}