В этом коде, когда я использую «:-)», эмодзи не отображается в выходных данных.
Но при использовании «1f60a» ИЛИ «1f60c» ИЛИ «e252» отображаются эмодзи. В чем проблема?
<?php
$emoji_url = "http://coremobile.ir/images_smileys";
$emoji_style = "";
$emoji_code = array(
":-)",
"1f60a",
"1f60c",
"e252");
$emoji_img = array(
'<img src="'.$emoji_url.'/1f60a.png" '.$emoji_style.'>',
'<img src="'.$emoji_url.'/1f60a.png" '.$emoji_style.'>',
'<img src="'.$emoji_url.'/1f60c.png" '.$emoji_style.'>',
'<img src="'.$emoji_url.'/e252.png" '.$emoji_style.'>'
);
$ret = 'This Test :-) 1f60a';
$ret = str_replace($emoji_code, $emoji_img, $ret);
echo $ret;
?>
Это должно работать для вас:
(Просто используйте strtr()
вместо str_replace()
, чтобы он не проходил через строку несколько раз)
$ret = strtr($ret, array_combine($emoji_code, $emoji_img));
выход:
Этот тест
Другой не работал, потому что он заменял каждый матч для первой замены, а затем второй и так далее.
0 заменено:
This Test :-) 1f60a
//^^^ match
сначала заменил:
This Test <img src="http://coremobile.ir/images_smileys/1f60a.png" > 1f60a
//^^^^^ match ^^^^^ match
второй заменил:
This Test <img src="http://coremobile.ir/images_smileys/<img src="http://coremobile.ir/images_smileys/1f60a.png" >.png" > <img src="http://coremobile.ir/images_smileys/1f60a.png" >
Других решений пока нет …