从Google翻译中删除所有意外的字符

时间:2019-07-03 07:45:58

标签: php regex encoding sublimetext3

我正在使用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中),然后使用键盘箭头移动,您会注意到光标将停在靠近该空格字符的位置两次。

撇开插入这些字符的原因,我如何使用带有PHP的Regex和/或使用崇高的文本来删除所有这些不可打印的字符?

然后,如何查看这些字符的unicode版本?

1 个答案:

答案 0 :(得分:2)

要删除所有other format Unicode chars,您可以使用

$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表示形式,以快速查看非ASCII字符的Unicode代码点:

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