gpt4 book ai didi

PHP:UTF8 中西里尔字符串的不区分大小写的 preg_replace

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:54:29 26 4
gpt4 key购买 nike

我有a PHP 5.3 script显示我网站的用户并想用它的旧名称替换某个俄罗斯城市(存储在 PostgreSQL 8.4.7 数据库中的 UTF8 + CentOS 5.5/64 位 Linux)(这是一个内部笑话):

preg_replace('/Волгоград/iu', 'Сталинград', $city);

不幸的是,这仅适用于完全匹配:Волгоград

这不适用于其他情况,例如 ВОЛΓОΓРАДволгоград

如果我将源代码修改为

preg_replace('/[Вв]олгоград/iu', 'Сталинград', $city);

然后它会捕获上面的第二种情况。

有谁知道这是怎么回事以及如何解决它(假设我不想为每个字母写[Xx])?

谢谢!亚历克斯

更新:

# rpm -qa|grep php
php53-bcmath-5.3.3-1.el5
php53-gd-5.3.3-1.el5
php53-common-5.3.3-1.el5
php53-pdo-5.3.3-1.el5
php53-mbstring-5.3.3-1.el5
php53-xml-5.3.3-1.el5
php53-5.3.3-1.el5
php53-cli-5.3.3-1.el5
php53-pgsql-5.3.3-1.el5

# rpm -qa|grep pcre
pcre-6.6-2.el5_1.7

最佳答案

我无法使用 PHP 5.3.3(PHP 5.3.3-1ubuntu9.3 with Suhosin-Patch (cli))重现您的问题:

$str1 = 'Волгоград';
$str2 = 'ВОЛГОГРАД';
$str3 = 'волгоград';

var_dump(preg_replace('/Волгоград/iu', 'Сталинград', $str1));
var_dump(preg_replace('/Волгоград/iu', 'Сталинград', $str2));
var_dump(preg_replace('/Волгоград/iu', 'Сталинград', $str3));

输出

string(20) "Сталинград"
string(20) "Сталинград"
string(20) "Сталинград"

您的 PHP 使用哪个 PCRE 版本?检查 phpinfo() 中的 pcre 部分。那是我系统上的那个:

...
pcre

PCRE (Perl Compatible Regular Expressions) Support => enabled
PCRE Library Version => 8.02 2010-03-19
...

关于PHP:UTF8 中西里尔字符串的不区分大小写的 preg_replace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5458396/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com