maximw
@maximw

Как решить проблемы с кодировкой preg_replace и UTF-8?

Запускал это с PHP 5.3.13 на Windows и с PHP 5.3.10 на Ubuntu.
В браузерах Chrome 33.0.1750.154 и FF 26.0, которые правильно детектировали кодировку как UTF-8
<?php
header('Content-Type: text/html; charset=UTF-8');
$message = "вае№\n_п8bс!\n  ии";
$message = preg_replace('/[^a-z0-9а-я\!]*/i', '', $message);
echo $message;

Выдает какую-то ерунду:
ваеп8b�!ии

Само собой, файл в кодировке UTF-8 без BOM. Браузер

Разумеется, использовал варианты с модификатором u, но лучше от этого не стало.
Использовал \w вместо a-z0-9 - не помогло.
Пробовал задать отдельно прописные буквы и отдельно строчные, чтоб избавиться от модификатора i - безрезультатно.

Как это лечить или чем заменить?
  • Вопрос задан
  • 7871 просмотр
Решения вопроса 1
smoked
@smoked
Вот так работает /[^сca-z0-9а-я!]*/
upd. /[^\p{L}0-9\!]/iu
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Документ у Вас в UTF-8 и выводите в UTF-8 а строка $message в какой кодировке?
Перед preg_replace переведите ее в utf-8 через iconv.

То что браузеры отобразили Ваш текс не означает что он в UTF-8, они автоматически подобрали кодировку и проигнорировали ваш Content-Type: text/html; charset=UTF-8
Ответ написан
$message = "вае№\n_п8bс!\n ии"; что это такое??
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы