带有unicode字符的PHP字符串(\ u2022)不会以子弹的形式回显

时间:2017-07-06 06:24:12

标签: php json string unicode encoding

我有一个包含子弹的字符串•格式如下:

$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。参考此处:http://emojipedia.org/face-with-tears-of-joy/

1 个答案:

答案 0 :(得分:0)

你可以这样做。它适用于两者。请检查

 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);