Upewnij się, że ustawiłeś double_encode
na false
, w przeciwnym razie już zakodowane ciągi zostaną ponownie zakodowane, obracając &
w &
. Następnie, gdy przejdziesz do wyświetlenia go po użyciu html_entity_decode
, będzie wyglądać tak, jakby nadal był zakodowany.
Niepożądany wynik:http://ideone.com/uQxuAM
Używanie htmlentities($string, ENT_QUOTES, 'UTF-8', false);
zapewni, że tak się nie stanie.
Następnie użyj html_entity_decode($string, ENT_QUOTES, 'UTF-8');
aby wyświetlić wartość.
Jednak MySQL jest w pełni zdolny do przechowywania zdekodowanych wartości w bazie danych.
Nigdy nie chcesz, aby w Twojej bazie danych były przechowywane ciągi zakodowane w htmlentities. Co się dzieje, gdy chcesz wygenerować plik CSV lub PDF, wysłać wiadomość e-mail lub cokolwiek, co nie jest HTML?
Oprócz tego, że musisz wykonać podwójne programowanie kodowania danych, zwiększając ilość danych w bazie danych, a następnie nadal musisz zdekodować dane wyjściowe, jest mnóstwo artykułów online, które odpowiadają, dlaczego nie powinieneś.
Tak więc powinieneś tylko kodować wartości, aby wyświetlić wynikowe dane wyjściowe w html.
Zamiast tego powinieneś zmienić wejście za pomocą 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) . "')";
lub jeszcze lepiej użyj przygotowanych wyciągów
$stmt = $mysqli->prepare("INSERT INTO links (link) VALUES(?)");
$stmt->bind_param("s", $string);
$stmt->execute();
Następnie sformatuj dane wyjściowe jako komunikat o sukcesie, aby wyświetlić, co zostało faktycznie dodane do bazy danych.
$html = "<div>Added Link: " . htmlentities($string, ENT_QUOTES, 'UTF-8', false) . "</div>";
Teraz nie ma potrzeby używania html_entity_decode
aby html był renderowany w przeglądarce.