PHP UTF8 preg_match

php регулярные выражения utf8 \w /u

Есть два сервера.

Есть тестовый код, который выполняется по разному на разных серверах. Вот он:

<?php
$currentWord = 'electrónico';
preg_match('/[\w\']+/iu', $currentWord, $matches);
var_dump($matches);

На первом сервере, получаю ожидаемый результат. Выводится:

array(1) { [0]=> string(12) "electrónico" }

На втором работает иначе:

array(1) { [0]=> string(6) "electr" }

ВОПРОС:

Почему так происходит, версии PHP немного отличаются. К сожалению не могу привести весь phpinfo().

Первый сервер запущен под PHP версии:
PHP Version 5.2.12
System Windows NT PC1173 5.1 build 2600
Build Date Dec 16 2009 17:01:16

Второй:
PHP Version 5.2.10-2ubuntu6.4
System Linux testingscrum.com 2.6.32.12-rscloud #26 SMP Mon May 17 12:35:34 UTC 2010 x86_64
Build Date Jan 6 2010 22:36:47

С английскими словами было все в порядке. А вот когда начали попадаться испанские и другие, начали проблемы.

То что PHP плохо работает с UTF8 в регулярных выражениях, я про это слышал. Но все таки хотелось бы решить мой вопрос. Или хоть понять куда копать. Плохо, что на сервере нет возможность проверять слова из другой романской группы (не английский), вот проблема в частности возникла при испанском слове. Но думаю и другие слова так же.

Может быть локально нужно сменить при каждой смене языке, или написать более универсальное регулярное выражение... нужна ваша помощь. Есть ли более специализированный форум, где бы помогли квалифицированные специалисты?

Примечание:
Я еще думал написать про кодировку самого файла, естественно она в UTF8. Это было бы странно. Вообщем кодировка файла в UTF8.

Примечание:
Что бы не было вопросов по поводу кодировок в самом файле, сделаем чистый PHP, без браузера.
Допишем в конце кода вот такую конструкцию

file_put_contents('test', print_r($matches, 1));

Которая будет скидывать результат в файл, таким образом мы уходим от браузера и можем запускать PHP файл из консоли.
Проблема осталась. Файловый менеджер TC, всегда им загружаю. Проблем нет, файлы одинаковые, что на локальном машине, что на хостинге.

Отлаживаю на локальной машине, заливаю на хостинге, и там все плохо.

Примечание:
На данный момент вопрос решен тем, что заменено регулярное выражение. Теперь такое:

preg_match('/[\pL\']+/iu', $currentWord, $matches);

Прочитал тут:
http://www.php.net/manual/ru/function.preg-match-all.php#81559
Ответы:
Интересный вопрос.
Ссылка на ресурс по теме. Когда ищу инфу по regexp постоянно на него натыкаюсь, там много материала.
Правда, на английском.
Сообщение 2 раза отправилось
Проверьте кодировку самого файла. Она тоже должна быть UTF8. Я так понимаю тестируете это на локальной машине и на хостинге. проверьте какая установлена локаль для среды на хостинге, она тоже должна поддерживать UTF8. Установить локаль можно так setlocale (LC_ALL, 'ru_RU.UTF-8'); точные имена локалей могут быть разные для разных систем, локали так же можно передавать массивами, если названия могут разнится, например
setlocale (LC_ALL, array('ru_RU.UTF-8', 'ru_RU.UTF8') );
Ну и файл на хостинг тоже должен приходить в UTFе. Проверьте Ваш файловый менеджер, которым вы закачиваете файлы на хостинг.


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.