PHP5.3预配Umlaute UTF-8改性剂

PHP5.3预配Umlaute UTF-8改性剂,utf-8,preg-match,php-5.3,diacritics,Utf 8,Preg Match,Php 5.3,Diacritics,以下命令在PHP5.3.8 Lamp(ubuntu11.04)-服务器上返回true,但在PHP5.3.2 Lamp(ubuntu10.04.2 LTS)-服务器上返回false 我几乎更改了php.ini文件中的所有设置,但没有成功。 我将系统区域设置更改为en_US.UTF-8,并将其作为PHP的默认区域设置。此外,我还尝试了de_de.UTF-8-locale 在这两种情况下,我都使用ubuntu提供的默认软件包 是否有人有其他想法,在不编译任何包的情况下更改什么,这样PHP5.3.2

以下命令在PHP5.3.8 Lamp(ubuntu11.04)-服务器上返回true,但在PHP5.3.2 Lamp(ubuntu10.04.2 LTS)-服务器上返回false


我几乎更改了php.ini文件中的所有设置,但没有成功。 我将系统区域设置更改为en_US.UTF-8,并将其作为PHP的默认区域设置。此外,我还尝试了de_de.UTF-8-locale

在这两种情况下,我都使用ubuntu提供的默认软件包

是否有人有其他想法,在不编译任何包的情况下更改什么,这样PHP5.3.2也将返回true?

一个是添加了:

PCRE_UCP

此选项更改PCRE处理
\B
\B
\D
\D
\S
\S
\W
,,
\w
,以及一些POSIX字符类。默认情况下,只有ASCII码 可以识别字符,但如果设置了PCRE_UCP,则Unicode属性 而是用于对字符进行分类。更多详情见 pcrepattern页面中有关泛型字符类型的部分。如果你设定 PCRE_UCP,匹配它影响的项目之一需要更长的时间。这个 只有使用Unicode属性支持编译PCRE时,选项才可用


不幸的是,在PHP中不能用模式修饰符直接触发此选项。如果可用(PHP 5.3.4及更高版本),它将由
u
和PCRE\u UTF8一起设置。

Unicode在PHP中还不完全支持

下面的代码

$url='abc αβγ';
define('CONST_REGEX_SANITIZE_URL', '/[^\040\w\/\.\-\:]/u');
$invalid_url = preg_match(CONST_REGEX_SANITIZE_URL, $url) ? 'true' : 'false';
echo $invalid_url;
php>5.3.10时返回“false”

php<5.3.3时为“true”(顺便说一下,当前的Debian php版本)

$url='abc αβγ';
define('CONST_REGEX_SANITIZE_URL', '/[^\040\w\/\.\-\:]/u');
$invalid_url = preg_match(CONST_REGEX_SANITIZE_URL, $url) ? 'true' : 'false';
echo $invalid_url;