我有一些最初是RTF文件的文件。它们是使用Microsoft Word 2016打开的,并保存为.txt文件。没有对文件进行其他更改。他们被转移到Linux系统。
使用命令时:
Linux上的 file myfile.txt
显示为Non-ISO extended-ASCII text, with CRLF line terminators
。
我正在将文件读入PHP并逐行处理它们。我试图用常规单引号替换任何正确的智能引号,但我的整个字符串都被删除。
我的代码如下所示:
$text = "I can’t go for supper";
$text = preg_replace('/\x{2019}/u', "'", $text);
echo $text;
这里的撇号是一个正确的智能引语,在Vim中显示为<92>
。通过网络研究,我发现这实际上是unicode字符2019
。
但是,当我尝试显示$text
的新值时,不会显示任何内容。
我的代码出了什么问题,为什么要删除整个文本字符串?
答案 0 :(得分:3)
经过进一步研究,我确定字符代码<92>
特定于Windows-1252字符编码。在我能够操作字符串之前,我首先需要将其转换为UTF-8。
以下代码正常运行:
$text = "I can’t go for supper";
$text = iconv("Windows-1251", "UTF-8", $text);
$text = preg_replace('/\x{2019}/u', "'", $text);
echo $text;