Php 如何国际化preg_替换(windows与Linux问题)

Php 如何国际化preg_替换(windows与Linux问题),php,internationalization,preg-replace,Php,Internationalization,Preg Replace,如果我在windows中运行此代码,它将生成“I!”!Trn!ti!N丽兹!ti!n',但如果我将其移动到linux服务器,它将不再执行替换 print preg_replace('/[À-ÖØ-öø-ÿ]/', '!', 'Iñtërnâtiônàlizætiøn'); 我已经以二进制文件的形式上传了文件,以确定FTP不是原因。我可以在服务器上读得很好,符号没有损坏。它似乎与preg_replace?的Linux实现有关,这可能与语言环境有关。但是您应该在正则表达式中使用/u unicode

如果我在windows中运行此代码,它将生成“I!”!Trn!ti!N丽兹!ti!n',但如果我将其移动到linux服务器,它将不再执行替换

print preg_replace('/[À-ÖØ-öø-ÿ]/', '!', 'Iñtërnâtiônàlizætiøn');

我已经以二进制文件的形式上传了文件,以确定FTP不是原因。我可以在服务器上读得很好,符号没有损坏。它似乎与preg_replace?

的Linux实现有关,这可能与语言环境有关。但是您应该在正则表达式中使用/u unicode修饰符Windows版本的libPCRE是否会默认启用此功能?

这可能与语言环境有关。但是您应该在正则表达式中使用/u unicode修饰符Windows版本的libPCRE是否可以根据默认值启用此功能?

如果您试图删除所有非ascii字符,最好提供一个有效字符的否定列表,即类似[^a-zA-Z0-9]的东西如果您需要,可能也必须添加一些符号,而不是[ä-ö߀和muchmoresuff]

如果你想去除所有非ascii字符,最好提供一个有效字符的否定列表,例如,[^a-zA-Z0-9]可能需要添加一些符号,而不是[ä-߀和muchmorestuff]

更正,我刚刚将这个精确的文本上传到我的linux框中,效果非常好。但是,如果我从post变量中获取相同的值,它将生成I!�T�rn!�ti!�N�丽兹!�ti!�n、 我已将文件作为二进制文件上传,以确保FTP不是原因。-实际上,除非您使用需要某种换行格式的老式CGI脚本,否则没有充分的理由使用ASCII模式。所以最好继续使用二进制模式,即使它在你的情况下没有改变任何东西。更正,我刚刚把这个确切的文本上传到我的linux框中,它工作得很好。但是,如果我从post变量中获取相同的值,它将生成I!�T�rn!�ti!�N�丽兹!�ti!�n、 我已将文件作为二进制文件上传,以确保FTP不是原因。-实际上,除非您使用需要某种换行格式的老式CGI脚本,否则没有充分的理由使用ASCII模式。因此,最好继续使用二进制模式,即使它不会改变您的情况。遗憾的是,这也会消除空格、标点符号等。其目的是创建一个精确的字数统计,类似于文字处理器和编辑器如何计算字数,这是一项非常棘手的工作。例如,PHP将Iñtërnëtiënëlizëtiën计算为8个单词,因为其中包含符号。遗憾的是,这还可以去除空格、标点符号等。目标是创建一个精确的单词计数,类似于文字处理器和编辑器计算单词的方式,这是一项非常棘手的工作。例如,由于符号的原因,PHP将Iñtërnëtiënëlizëtiên计为8个单词。u修饰符会导致错误消息:警告:pregëu replace[function.preg replace]:编译失败:第行D:\xampp\htdocs\web\test.PHP中偏移量2处的UTF-8字符串无效2@Kato:然后进一步调查。使用recode验证字符集。最终可能是UTF-16或UCS2??您通常使用亚洲字符集吗?IE中有一个浏览器设置,可以解释您的$\u POST值。/u修饰符会导致一条错误消息:警告:preg\u replace[function.preg replace]:编译失败:第行D:\xampp\htdocs\web\test.php中偏移量2处的无效UTF-8字符串2@Kato:然后进一步调查。使用recode验证字符集。最终可能是UTF-16或UCS2??您通常使用亚洲字符集吗?IE中有一个浏览器设置,可以解释您的$u POST值。