удалить все неожиданные символы из Google переводчика - PullRequest
1 голос
/ 03 июля 2019

Я использую Google переводчик для перевода текста.

Иногда переводчик Google добавляет непечатаемые символы в переведенный текст.

Например, перейти на эту страницу: https://www.google.com/search?client=ubuntu&channel=fs&q=traduttore&ie=utf-8&oe=utf-8

Выберите с итальянского на английский и переведите leone marino.

Результат будет:

sea ​​lion
   ^ here there are other two non-printable chars, exactly before the "l" char

Вы можете проверить его, поместив текст в любое место, где вы можете его изменить (например, в текстовом редакторе или в текстовом поле на любой веб-странице, или даже в URL браузера), и, перемещаясь со стрелками на клавиатуре, вы заметите, что курсор остановится в два раза ближе к символу пробела.

Оставляя в стороне причину, по которой эти символы вставляются, как я могу удалить все эти непечатаемые символы, используя Regex с PHP и / или используя возвышенный текст?

А как посмотреть версию этих символов в юникоде?

1 Ответ

2 голосов
/ 03 июля 2019

Чтобы удалить все другие символы Unicode , вы можете использовать

$s = preg_replace('~\p{Cf}+~u', '', $s);

Поскольку вы хотите удалить пробел нулевой ширины, вы можете просто использовать

$s = str_replace("\u{200B}", "", $s);

Я использую https://r12a.github.io/app-conversion/ (без присоединения), чтобы проверить наличие скрытых символов в строках:

enter image description here

Возможный код PHP для преобразования строкив \uXXXX представление для быстрого просмотра кодовых точек Unicode для не-ASCII-символов:

$input = "sea ​​lion";
echo preg_replace_callback('#[^ -~]#u', function($m) {
    return substr(json_encode($m[0]), 1, -1);
}, $input); 
// => sea \u200b\u200blion
...