удалить смайлики в формате \ uXXXXX из строки, используя php - PullRequest
0 голосов
/ 26 марта 2020

Мне нужно удалить некоторые эмодзи из строки, используя формат \ uXXXXX.

$msg = "\u200b\ud83d\ude48 This is an example\nAnother line \u2199\u2199";

Все пробные и найденные функции не работают. Я не знаю, если это проблема функции или моей строки ...

пример используемой функции:

preg_replace('/[[:^print:]]/', '', $string);

или:

function remove_emoji($string) {

// Match Emoticons
$regex_emoticons = '/[\x{1F600}-\x{1F64F}]/u';
$clear_string = preg_replace($regex_emoticons, '', $string);

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

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

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

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

return $clear_string;
}

Пробовал заменив \ x на \ u внутри функции, но я получаю ошибку .... Кто-нибудь может объяснить мне, почему функции не работают?

1 Ответ

0 голосов
/ 26 марта 2020

Вы уверены, что ваш текст содержит реальные символы, а не только \uxxxx строки, как в вашем примере? Это:

$text = "? This is an example. ?";
print( preg_replace('/[\x{1F600}-\x{1F64F}]+/u', '', $text) );

должно фактически выдавать:

' This is an example. '

Edit : В противном случае просто сопоставьте эти строковые представления символов юникода в вашем тексте с чем-то вроде /\\u[0-9a-fA-F]{4}/g и заменить их. Например:

$msg = "\u200b\ud83d\ude48 This is an example\nAnother line \u2199\u2199";
print( preg_replace('/\\\u[0-9a-fA-F]{4}/', '', $msg) );

Вывод:

" This is an example
Another line "
...