Кривой вывод из массива в php

Neumann1970
На сайте с 28.05.2017
Offline
54
915

Всем привет!

Столкнулся с проблемой некорректного отображения текстовых строк. С обычным текстом все нормально, но когда добавляются html теги получается каша:

То как выводится:


<?php
$list_items = get_post_meta($post->ID, 'list_items', true);

$textAr = explode(";", trim($list_items));
$textAr = array_filter($textAr, 'trim');

foreach ($textAr as $line) {
echo "<li><p class='li-text'>$line</p></li>";
}
?>

То что выводиться:


Вывести <

b>

простой<

/b>

текст

Что должно быть:

Вывести простой текст

Элементы списка формируются и строки которая делится на подстроки когда встречается ";". В строке нет точки с запятой, но все равно происходит перенос те неправильное заполнение массива и рвет строку на неправильные части.

Где может быть ошибка ? С чем связано?

infant
На сайте с 15.03.2008
Offline
170
#1

Значение $list_items дай, и посмотрим где не так. Но вероятнее всего тебе надо htmlspecialchars

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#2

ну сделайте:

print_r($textAr);

и посмотрите, что у вас в массиве. Вопрос не ясен.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
Neumann1970
На сайте с 28.05.2017
Offline
54
#3
LEOnidUKG:
ну сделайте:

print_r($textAr);

и посмотрите, что у вас в массиве. Вопрос не ясен.
Array ( [0] => Вывести < [1] => b> [2] => простой< [3] => /b> [4] => текст )
Но вероятнее всего тебе надо htmlspecialchars

Зачем мне нужно наоборот чтоб html работал, а он заменяет теги спец символами, какой смысл?

infant
На сайте с 15.03.2008
Offline
170
#4
Neumann1970:
Зачем мне нужно наоборот чтоб html работал, а он заменяет теги спец символами, какой смысл?

да, да, вы правы. Это я уже к вечеру. Вот так верно htmlspecialchars_decode()

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#5
Neumann1970:
Зачем мне нужно наоборот чтоб html работал, а он заменяет теги спец символами, какой смысл?

Ну смотрите в исходнике тогда: $list_items, что там у нас.

Увидите проблему.

infant
На сайте с 15.03.2008
Offline
170
#6

Проблема в том, что вы раскидываете массив по строкам с элеметами HTML сущностей

array: (
0 => " Вывести <"
1 => "b>"
2 => "простой<"
3 => "/b>"
4 => "текст "
)

Естественно при каждой итерации у foreach мы будем видеть выполнение строк вида

echo "<li><p class='li-text'>Вывести <</p></li>";
echo "<li><p class='li-text'>b></p></li>";
echo "<li><p class='li-text'>простой<</p></li>";
echo "<li><p class='li-text'>/b></p></li>";
echo "<li><p class='li-text'>текст </p></li>";
Neumann1970
На сайте с 28.05.2017
Offline
54
#7
infant:
Проблема в том, что вы раскидываете массив по строкам с элеметами HTML сущностей

Я разбиваю когда встречается ";" причем здесь HTML? :

$textAr = explode(";", trim($list_items));

Я просто не пойму, что она так криво ведет себя когда тэги html добавляются?

infant
На сайте с 15.03.2008
Offline
170
#8

Это верное значение ?

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#9
Я просто не пойму

С такой логикой сложно программировать, понимаю.

В PHP нет багов в этих функциях, уж точно. А теперь думайте... ещё раз думайте.

Neumann1970
На сайте с 28.05.2017
Offline
54
#10
Вот так верно htmlspecialchars_decode()

Спасибо! Разобрался, благодарю за наводку.

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