DanyBoo
@DanyBoo
https://saity74.ru

Проблема с кодировками в php и разными Linux

Всем привет!
Сегодня меня довела до белого каления следующая проблема с кодировками. Про такие вещи тысячи топиков в интернете, и уже сталкивался миллион раз, но тут же — полный отстой!

мне надо было найти все слова в контенте страницы и нужные (кейворды) заменить ссылками. Казалось бы плевое дело. И это действительно так было пока этот плагин вертелся на Debian + php 5.2.

Поиск слов производился с помощью примитивной регулярки:

'/\b'.$keyword.'\b/'

Ставлю этот плагин на CentOS русские слова не ищет. Я понимаю что надо бы сделать

setlocale(LC_ALL, 'ru_RU.UTF-8');

Все начинает работать. Ставлю на другой сервер c CentOS там не работает! И перестает работать на Debian!!!

делаю так

setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251', 'ru_RU.UTF-8');

смешно не правдали! Результат работает в CentOS перестает работать на Debian.
Я уже нахожусь на грани! Я реально запереживал )

тут я подумал а что если регулярку заменить двумя, так сказать, из пушки по воробьям!
убрал локали и сделал $regex = array('/\b'.$keyword.'\b/', '/\s'.$keyword.'\s/');

И да! Товарищи заработало! Но мне так не нравится!

Вопрос: как быть чтобы было универсально и не коряво?!

Всем спасибо за ответы =)
  • Вопрос задан
  • 4877 просмотров
Пригласить эксперта
Ответы на вопрос 4
DanyBoo
@DanyBoo Автор вопроса
https://saity74.ru
В общем такая вот тема у меня получилась:
Это код который я по-всякому мучал
preg_match_all('#\bпхп|php\b#', 'пхп php', $m);


просто без лакалей и модификаторов (по умолчанию система работает с UTF-8 скрипт сохранен тоже в UTF-8)

var_dump($m) -> array(1) { [0]=> array(1) { [0]=> string(3) "php" } }


теперь ставим модификатор u

var_dump($m) -> array(1) { [0]=> array(1) { [0]=> string(3) "php" } }


Добавляем
setlocale(LC_ALL, array('ru_RU.cp1251'));

и убираем модификатор u
в результате получаем что хотели
var_dump($m) -> array(1) { [0]=> array(2) { [0]=> string(6) "пхп" [1]=> string(3) "php" } }


только смущает string(6) «пхп» это ведь в UTF так должно быть
потом решил по мучать регистры, потому что это тоже важно, ни в какую не работает ПХП от пхп и Пхп не видит точнее не то что не отличает, просто перестает работать регулярка (((
Ответ написан
DanyBoo
@DanyBoo Автор вопроса
https://saity74.ru
грустно когда минусы есть а комментов нет! Как-то это по-пидорски не по-человечески!
Ответ написан
Комментировать
@lionsimba
setlocale(LC_ALL, "");

?
Ответ написан
AmdY
@AmdY
PHP и прочие вебштучки
Кстати, а вы не хотите сказать регулярке что она работает с юникодом указав модификатор «u»
Чтобы узнать локаль поддерживаемую системой нужно выполнить «locale -a», а не гадать
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы