从字符串中删除unicode

时间:2015-04-23 08:19:13

标签: php

我有以下PHP字符串:

\ud83c\udf38Owner IG: deidarasss\n\ud83c\udf38free ongkir BANDA ACEH dan LHOKSEUMAWE\n\u27a1 testimoni: #testydfs\n\ud83d\udcf1LINE: darafitris\nsold=delete\nCLOSE  \ud83d\ude0d\ud83d\ude03

我想从这个字符串中删除所有unicode,我该怎么办?

我尝试过以下操作:

 private static function removeEmoji($text) {
        $clean_text = "";

        // Match Emoticons
        $regexEmoticons = '/[\x{1F600}-\x{1F64F}]/u';
        $clean_text = preg_replace($regexEmoticons, '', $text);

        // Match Miscellaneous Symbols and Pictographs
        $regexSymbols = '/[\x{1F300}-\x{1F5FF}]/u';
        $clean_text = preg_replace($regexSymbols, '', $clean_text);

        // Match Transport And Map Symbols
        $regexTransport = '/[\x{1F680}-\x{1F6FF}]/u';
        $clean_text = preg_replace($regexTransport, '', $clean_text);

        // Match Miscellaneous Symbols
        $regexMisc = '/[\x{2600}-\x{26FF}]/u';
        $clean_text = preg_replace($regexMisc, '', $clean_text);

        // Match Dingbats
        $regexDingbats = '/[\x{2700}-\x{27BF}]/u';
        $clean_text = preg_replace($regexDingbats, '', $clean_text);

        return $clean_text;
    }

但它并没有真正帮助

2 个答案:

答案 0 :(得分:0)

要从字符串 $ text 中删除所有\u....,请按以下步骤操作:

$text = preg_replace('/\\\\u[0-9A-F]{4}/i', '', $text);

这使用正则表达式来查找这些事件,并用空字符串替换所有这些事件。

或者,要将所有出现的\u....替换为其代表的字符,请执行以下操作:

$text = json_decode('"' . str_replace('"', '\"', $text) . '"');

这将文本用双引号括起来,转义其中的任何双引号,这使它成为有效的JSON字符串。由于\ u是一个有效的JSON转义码,因此可以解码该JSON以获取实际字符。

答案 1 :(得分:0)

由于找不到更好的解决方法,因此这是我的解决方案。如果您的数据太大,则不建议使用此代码。

$input = '\ud83c\udf38Owner IG: deidarasss\n\ud83c\udf38free ongkir BANDA ACEH dan LHOKSEUMAWE\n\u27a1 testimoni: #testydfs\n\ud83d\udcf1LINE: darafitris\nsold=delete\nCLOSE  \ud83d\ude0d\ud83d\ude03';

while(strpos($input,'\u') !== false){
    $bar_u0 = strpos($input,'\u');
    
    $input = str_replace(substr($input, $bar_u0, 6), '', $input);
}
echo $input;