Есть два сервера.
Есть тестовый код, который выполняется по разному на разных серверах. Вот он:
<?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
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.