\ w зависит от кодировки? - PullRequest
3 голосов
/ 24 июля 2011

Я искал границы слова из кодировок с:

<?php
header('Content-Type: text/plain; charset="ISO-8859-7"');//Changing the charset attribute
$i=0;
for($i=0;$i<=255;$i++){
    $char=chr($i);  
    if(preg_match('/^\w$/',$char,$m)){
    echo "[".ord($m[0])."]";}
    }
?>

Я не знаю, если это неправильно. Но всегда дает мне определенные позиции, независимо от того, какая кодировка выдана. Кажется, что всегда, независимо от того, какая кодировка, '\ w' совпадает с байтами, которые являются словами из ISO-8859-1.

1 Ответ

2 голосов
/ 24 июля 2011

Да!\ w, \ b зависит от набора символов!В моем коде я использую:

setlocale(LC_CTYPE, "cs_CZ");

, чтобы справиться с этим.Это влияет на поведение \ w, \ b в регулярных выражениях, но также strtoupper().Если вам также нужна сортировка и сравнение строк для правильной работы, вы должны использовать (в зависимости от вашей страны / региона) что-то вроде:

setlocale(LC_COLLATE, "cs_CZ");

Я также нашел этот сложный способ - он не работал...:)

Итак, , чтобы ответить на ваш оригинальный вопрос - вы не можете повлиять на это с помощью функции header(), потому что это просто сообщает кодировку браузеру.Вам нужно изменить поведение PHP на сервере, что достигается с помощью приведенных выше команд.

...