Проблема с кодировкой при использовании preg_match

Статус
В этой теме нельзя размещать новые ответы.

phillip

Полезный
Регистрация
4 Сен 2007
Сообщения
411
Реакции
15
Есть строка в utf-8:
Код:
href="/catalog/metalloplastic/valtec/"><span><i class="glyphicon glyphicon-minus"></i>
                             Valtec</span>
разбираю ее функцией
Код:
preg_match("&href=\"(.+?)\".+?</i>(.+?)</span>&is", $cat, $matches);
$matches[2]=trim($matches[2]);
На выходе во второй подмаске получается какая-то херня, вместо "Valtec" получаю " ? Valtec"
Решил дописать вот так
Код:
$matches[2]=htmlentities(trim($matches[2]));
В итоге получаю "&Acirc;&nbsp;Valtec"
И так по всем строкам какие я разбираю.
Как от этого избавиться?
 
Если не указана кодировка при вызове htmlentities, то значение зависит от используемой версии PHP. В PHP 5.6 и старше, для значения по умолчанию используется конфигурационная опция default_charset. В PHP 5.4 и 5.5 используется UTF-8 по умолчанию. Более ранние версии PHP используют ISO-8859-1.

Там в тексте видимо встречается неразрывный пробел, который кодируется двумя байтами \xC2\xA0.
Можно в регулярке указать модификатор /u (PCRE_UTF8) и использовать \s* для пропуска ненужных пробелов.
Код:
preg_match("&href=\"(.+?)\".+?</i>\s*(.+?)</span>&isu", $cat, $matches);

или str_replace("\xC2\xA0", " ", $text); а после уже обычный trim()
 
Смотря, что вы хотите получить
на вашем примере, лучше сделать так...
preg_match("|href=\"(.+?)\"><span><i.*>.*</i>(.+?)</span>|Uis", $match, $text);
в $match[1] получаете url
в $match[2] получаете текст
 
Убери все htmlentities

filter_var($stringWithHtmlEntities, FILTER_SANITIZE_STRING);
 
AddDefaultCharset utf8 в .htaccess поставил?
 
AddDefaultCharset utf8 в .htaccess поставил?
Это вообще никак не влияет. Данная опция для хидеров, передающихся в браузер.

А почему у вас Valtek на второй строке идет? Разеритесь аккуратно с этим, может там действительно куча каких-нибудь непечатных символов.

Для utf-8 используйте модификатор /u
 
Да там символ какой-то невидимый
Поменяй регулярку как-нибудь так:
"&href=\"(.+?)\".+?</i>([a-zA-Z]+?)</span>&is"
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху