PHP preg_replace_callback с юникодом - PullRequest
1 голос
/ 30 марта 2012

Я написал простой скрипт ниже, чтобы смоделировать мою проблему. И моя строка, и шаблон содержат символы Юникода.

Обычно, если я запускаю его из командной строки (php -f test.php), он выводит «match», как и ожидалось. Но если я запускаю его через веб-сервер (apache, http://localhost/test.php),, выводится «нет совпадения»). Я использую PHP 5.3.

Есть идеи, почему он ведет себя по-другому? Как мне заставить его работать через веб-сервер?

спасибо.

<?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';
}
?>

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Попробуйте изменить default_charset, используя iniset ('default_charset', 'utf-8').

Если это работает, это означает, что конфигурации CLI и Apache PHP имеют отдельные конфигурации php.ini и, возможно, эта переменная установлена ​​по-разному, или, возможно, в зависимости от среды.

Вы можете оставить это в качестве решения или найти альтернативу.

Ура,

Dan

0 голосов
/ 30 марта 2012

Проверьте ваш 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 self: http://devlog.info/2008/08/24/php-and-unicode-utf-8/

...