Я храню отформатированную строку в базе данных, используя PHP.
И отображение этой строки в тд таблицы HTML.
Мой образец текста похож на
<font color="#0033CC"><b>water </b>releasing<i> H<sub>3</sub>O<sup>+</sup></i> ions; </font>
При отображении в тд, он просто отображает эти необработанные данные вместо форматированного текста. Я просмотрел источник в браузере и нашел ниже данные.
<td><font color="#0033CC"><b>water </b>releasing<i> H<sub>3</sub>O<sup>+</sup></i> ions; </font></td>`
Это означает, что «заменяется "
> заменяется на >
и так далее.
Есть ли какой-либо встроенный подход в PHP, чтобы избежать этого сценария и отображения форматированного текста?
Заранее спасибо!
Вы могли бы использовать html_entity_decode ();
<?php
$orig = 'J\'ai "sorti" le <strong>chien</strong> tout à l\'heure';
$a = htmlentities($orig);
$b = html_entity_decode($a);
echo $a; // J'ai "sorti" le <strong>chien</strong> tout &agrave; l'heure
echo $b; // J'ai "sorti" le <strong>chien</strong> tout à l'heure
?>
На самом деле я сделал ошибку во время хранения данных.
Я использовал следующие методы для обработки данных в первую очередь.
// $ data = stripslashes ($ data);
// $ data = htmlspecialchars ($ data);
после комментирования эти два метода решили мою проблему
Во-первых, не кодируйте специальные символы HTML перед сохранением данных.
Тебе лучше сделать это как раз перед print
/echo
.
<?php
function h($str)
{
return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}
$data = get_something_data_from_database();
/* More logic... */
?>
<!DOCTYPE html>
<title>Example</title>
<meta charset="UTF-8">
<div><?=h($data)?></div>
Да, <?=h(...)?>
это идиома ( <?=...?>
это короткий синтаксис echo
)
Или вам нужно разрешить пользователям вводить необработанный HTML? Без фильтрации или проверки, это приносит нам основные уязвимость: Межсайтовый скриптинг. Вам нужно использовать Очиститель HTML для этого.