用常规引号替换智能引号会导致整个字符串被删除

时间:2018-01-23 21:43:16

标签: php regex unicode

我有一些最初是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的新值时,不会显示任何内容。

我的代码出了什么问题,为什么要删除整个文本字符串?

1 个答案:

答案 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;