2012-01-18 19 views
2

次のコマンドは、PHP5.3.8ランプ(Ubuntu 11.04)-Serverではtrueを返しますが、PHP5.3.2ランプ(Ubuntu 10.04.2 LTS)-Serverではfalseを返します。Umlaute UTF-8修飾子付きPHP5.3 preg_match

<?php echo preg_match('/\w/u', 'ß'); ?> 

私はphp.iniファイルの設定をほとんど変更しましたが、成功しませんでした。 システムのロケールをen_US.UTF-8に変更し、PHPのデフォルトのロケールにしました。さらに私はde_DE.UTF-8-localeを試しました。

どちらの場合でも、私はubuntuが提供するdefault-packagesを使用しています。

PHP5.3.2でもtrueを返すように、誰かが別の考え方、変更するもの、パッケージをコンパイルしない人はいますか?

答えて

6

PHP 5.3.2 uses PCRE 8.00 while PHP 5.3.8 uses PCRE 8.11.一つchange in PCRE 8.10PCRE_UCP optionを追加した:

PCRE_UCP

このオプションは、PCREは\B\b\D\d\S\s\W\wを処理する方法を変更し、いくつかのPOSIX文字クラス。既定では、ASCII 文字のみが認識されますが、PCRE_UCPが設定されている場合、Unicodeプロパティ が文字の分類に代わり使用されます。詳細は、pcrepatternページの一般的な文字タイプの のセクションに記載されています。 PCRE_UCPと設定すると、影響を受ける項目のうちの1つに一致する項目の方がずっと時間がかかります。 オプションは、PCREがUnicodeプロパティのサポートでコンパイルされている場合にのみ使用できます。

残念ながら、このオプションをPHPのパターン修飾子で直接起動することはできません。使用可能な場合は、uPCRE_UTF8(PHP 5.3.4以降)が設定されます。

+0

と '真' ありがとうございました。 –

0

Unicodeは、まだ完全にはPHP

次のコードはPHP> 5.3.10

$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.3 <(ちなみに現在のDebianのPHPバージョン)

関連する問題