将Unicode代码点转换为整个文件中的字符串

时间:2019-02-16 09:30:51

标签: php sed unicode encoding

我正在运行一个PHP Web应用程序,该应用程序接受来自用户的文件,向其中添加一些数据,并为用户提供新文件进行下载。

有时候,我得到的文件中包含看不见的控制字符,例如BOM,零宽度,不间断空格等(在纯文本编辑器中,它不显示,但是在用' less 检查时'命令或在' vi '编辑器中,它显示等),这会导致我们的处理出现问题。目前,我列出了一些这样的代码点,在处理之前,我先使用“ sed”从文件中删除了这些代码点(以下是我使用的命令)。然后,我还使用“ iconv”将非utf文件转换为utf-8。

exec("sed -i 's/\xE2\x80\x8F|\xC2\x81|\xE2\x80\x8B|\xE2\x80\x8E|\xEF\xBB\xBF|\xC2\xAD|\xC2\x89|\xC2\x83|\xC2\x87|\xC2\x82//g' 'my_file_path'");

但是这种字符的列表在增加,如果处理不当,这些字符会导致文件编码为“ unknown-8bit”,这是不正确的,并且会显示损坏的内容。现在,我需要一个有效的解决方案,不需要查找代码表。

我应该怎么做,以便它自动处理文件中的每个代码点,而无需维护要替换的代码列表。我也愿意使用Perl / python / bash脚本解决方案。

P.S。我需要支持所有语言(不仅是美国ascii或扩展ascii),而且我也不想丢失任何数据。

0 个答案:

没有答案