1

私の問題をシミュレートするために、以下の簡単なスクリプトを書きました。文字列とパターンの両方に Unicode 文字が含まれています。

基本的に、コマンド ライン (php -f test.php) から実行すると、期待どおりに "match" が出力されます。しかし、Web サーバー (Apache、http://localhost/test.php ) を介して実行すると、「一致しません」と出力されます。PHP 5.3 を使用しています。

なぜそれが異なる動作をするのか考えていますか? Web サーバー経由で動作させるにはどうすればよいですか?

ありがとう。

<?php
function myCallback($matches) {
    return $matches[0];
}

$value = 'aaa äää';
$pattern = '/(\bäää)/u';

$value = preg_replace_callback($pattern, 'myCallback', $value, -1, $count);
if ($count > 0) {
    echo "match";
} else {
    echo 'no match';
}
?>
4

2 に答える 2

1

iniset('default_charset'、'utf-8')を使用してdefault_charsetを変更してみてください。

それが機能する場合は、CLIとApache PHPの構成に別々のphp.ini構成があり、おそらくこの変数は異なる方法で、または環境に基づいて設定されていることを意味します。

あなたはそれを解決策として残すか、代替案を見つけることができます。

乾杯、

ダン

于 2012-03-29T21:24:34.317 に答える
0

test.php に正しいヘッダーがあることを確認してください。PHP では、次のように記述する必要があります。

header('Content-Type: text/html; charset=utf-8'); 

HTML の頭のように:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 

標準では ISO-8895-1 に設定されており、それが問題を引き起こしている可能性があります。ここでは、複数のエンコーディング (utf-8 エンコーディングが受け入れられない場合) と utf-8 自体に関する詳細情報を見つけることができます: http://devlog.info/2008/08/24/php-and-unicode-utf-8 /

于 2012-03-29T21:28:26.257 に答える