提问者:小点点

带有unicode字符(\u2022)的PHP字符串不会作为项目符号回显


我有一个字符串,其中包含以下格式的项目符号•:

$string = "Yay bullets!!\n\\u2022\n\\u2022\n\\u2022\n\\u2022\n\\u2022\n#somany";

我需要回声显示子弹的线。我最接近打印出来的方法是创建$string=“\u2022”;然后回显json_decode('“'.$string.'”');,它可以很好地打印项目符号。

当我尝试对完整的$string执行同样的操作时,我没有得到任何结果,也没有错误。

以下是我对其结果输出所做的一些尝试:

$raw = htmlspecialchars("Yay bullets!!\n\\u2022\n\\u2022\n\\u2022\n\\u2022\n\\u2022\n#yes", ENT_QUOTES);

echo $raw;

结果:

Yay bullets!!
\u2022
\u2022
\u2022
\u2022
\u2022
#yes

当我尝试:

echo mb_convert_encoding($raw, 'UTF-8', 'HTML-ENTITIES');

结果:同上。没有变化。

当我尝试:

echo json_decode('"' . $raw . '"');

结果:无输出。

当我尝试:

echo mb_convert_encoding($raw, 'UTF-8', 'UTF-16BE');

结果:

我将非常感谢帮助弄清楚如何正确地输出这一点。

多谢了。

编辑

除了项目符号之外,我还无法打印出诸如\\ud83d\\udc93之类的emoji参考代码。此处参考:http://emojipedia.org/face-with-tores-of-joy/


共1个答案

匿名用户

你可以这样做。这对双方都有效。请查收

 function decodeEmoticons($src) {
    $replaced = preg_replace("/\\\\u([0-9A-F]{1,4})/i", "&#x$1;", $src);
    $result = mb_convert_encoding($replaced, "UTF-16", "HTML-ENTITIES");
    $result = mb_convert_encoding($result, 'utf-8', 'utf-16');
    return $result;
}
$r = "Yay bullets!!\n\\u2022\n\\u2022\n\\u2022\n\\u2022\n\\u2022\n#somany";
echo decodeEmoticons($r);
$src = "\u263a\ud83d\ude00\ud83d\ude01\ud83d\ude02\ud83d\ude03";
echo decodeEmoticons($src);