preg_replace с мусором: конверт букв в цифры

Metal Messiah
На сайте с 01.08.2010
Offline
152
500

Добрый день.

Был много лет работавший код, очищающий строку от всего кроме цифр и конвертирующий это в число.

$res=preg_replace('/[^0-9]+/u', '', $res);

Сейчас наблюдаю лажу:

výsledky: 354,000

становится 253354000, хотя должно быть 354000.

Цикл for() конечно никто не отменял, но хочу разобраться в причине и сделать правильно. Что за баг?

Обнаружил что #253 это код y с апострофом. Поставил html_entity_decode, теперь preg_replace выдает пустой результат

Пока работает так:

for ($i=0; $i<strlen($res); $i++)

{
$c=substr($res,$i,1);
if (($c>='0') && ($c<='9')) $new.=$c;
}
anonymous, думай что говоришь и не забывай подписать отзыв :)
LEOnidUKG
На сайте с 25.11.2006
Offline
1724
#1

а зачем /u?

Просто не работает:

$str = preg_replace("@[^0-9]@", '', $str); ?

---------- Добавлено 14.06.2015 в 20:49 ----------

Хотя и ваш код тоже работает на этой строчке. Проверяйте входные данные возможно там у вас что-то с исходным кодом.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Metal Messiah
На сайте с 01.08.2010
Offline
152
#2

Спасибо. Относительно исходного кода надо было добавить html_entity_decode и убрать /u.

Да, мой код с циклом работает, но это криво.

siv1987
На сайте с 02.04.2009
Offline
427
#3
Metal_Messiah:
Относительно исходного кода надо было добавить html_entity_decode

Ну дык у вас же html-сущности, оттуда и появляются лишние цифры.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий