Уверете се, че сте задали double_encode
на false
, в противен случай вече кодираните низове ще бъдат кодирани отново, обръщайки &
в &
. След това, когато отидете да го покажете след използване на html_entity_decode
, ще изглежда така, сякаш все още е кодиран.
Нежелан резултат:http://ideone.com/uQxuAM
Използване на htmlentities($string, ENT_QUOTES, 'UTF-8', false);
ще гарантира, че това няма да се случи.
След това използвайте html_entity_decode($string, ENT_QUOTES, 'UTF-8');
за показване на стойността.
MySQL обаче е напълно способен да съхранява декодираните стойности в базата данни.
Никога не искате да имате низове, кодирани с htmlentities, съхранявани във вашата база данни. Какво се случва, когато искате да генерирате CSV или PDF, да изпратите имейл или нещо друго, което не е HTML?
Освен факта, че трябва да извършите двойно програмиране на кодиране на данните, увеличаване на количеството данни в базата данни, след което все още трябва да декодирате изхода, има тонове статии онлайн, които отговарят защо не трябва.
Така че трябва да кодирате само стойностите за показване на получените изходни данни в html.
Вместо това трябва да избегнете входа, като използвате mysqli_real_escape_string
$string = '<a href="/path/to/file?a=b&foo=bar#baz">My Link</a>';
$sql = "INSERT INTO links (link)"
. "VALUES(" . mysqli_real_escape_string($string) . "')";
или още по-добре използвайте подготвени отчети
$stmt = $mysqli->prepare("INSERT INTO links (link) VALUES(?)");
$stmt->bind_param("s", $string);
$stmt->execute();
След това да форматирате изхода като съобщение за успех, за да покажете какво всъщност е добавено към базата данни.
$html = "<div>Added Link: " . htmlentities($string, ENT_QUOTES, 'UTF-8', false) . "</div>";
Сега няма нужда да използвате html_entity_decode
за изобразяване на html в браузъра.