我有一些最初是RTF文件的文件。它们是用Microsoft Word 2016打开的,并另存为.txt文件。未对这些文件进行任何其他更改。它们被转移到Linux系统上。
使用命令时:
在Linux上,他们显示为Non-ISO extended-ASCII text, with CRLF line terminators的file myfile.txt。
我正在将文件读入PHP并逐行处理它们。我试图用常规的单引号替换任何正确的智能引号,但我的整个字符串都被擦除了。
我的代码如下所示:
$text = "I can’t go for supper";
$text = preg_replace('/\x{2019}/u', "'", $text);
echo $text;这里的撇号是一个正确的智能引号,它在Vim中显示为<92>。在网上搜索后,我发现这实际上是unicode字符2019。
但是,当我尝试显示$text的新值时,什么也没有显示。
我的代码出了什么问题?为什么它要清除整个文本字符串?
发布于 2018-01-24 06:11:16
经过进一步的研究,我确定字符代码<92>是特定于Windows1252字符编码的。在能够操作字符串之前,我首先需要将其转换为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;https://stackoverflow.com/questions/48411314
复制相似问题