维基百科 定义了许多可能使用的表情符号。我想将这个列表与字符串中的单词匹配。我现在有如下代码:
$string = "Lorem ipsum :-) dolor :-| samet";
$emoticons = array(
'[HAPPY]' => array(' :-) ', ' :) ', ' :o) '), //etc...
'[SAD]' => array(' :-( ', ' :( ', ' :-| ')
);
foreach ($emoticons as $emotion => $icons) {
$string = str_replace($icons, " $emotion ", $string);
}
echo $string;
输出:
Lorem ipsum [HAPPY] dolor [SAD] samet
原则上这是可行的。然而,我有两个问题:
如您所见,我在数组中每个表情符号周围都加了空格,例如' :-) '而不是':-)'。我认为这使得数组不太易读。有没有一种方法可以存储没有空格的表情符号,但仍然可以匹配带有空格的$string?(并且与现在的代码一样高效?)
或者也许有一种方法可以将表情符号放入一个变量中,并在空格上分裂以检查$string?类似于
$emoticons = array( '[HAPPY]' => ">:] :-) :) :o) :] :3 :c) :> =] 8) =) :} :^)", '[SAD]' => ":'-( :'( :'-) :')" //等等...
str_replace是最有效的方法吗?
我问这个问题是因为我需要检查数百万个字符串,所以我正在寻找最有效的方法来节省处理时间 :)
眨眼的表情
和 U+263A微笑的表情
☺ 这样的码点。它们中的大多数都在 Emotions 块中(就像上面两个中的第一个),只有很少数在传统的 BMP 中。 - tchrist