Certifique-se de definir o
double_encode
para false
, caso contrário, as strings já codificadas serão codificadas novamente, transformando &
em &
. Então, quando você for exibi-lo depois de usar html_entity_decode
, aparecerá como se ainda estivesse codificado. Resultado indesejável:http://ideone.com/uQxuAM
Usando
htmlentities($string, ENT_QUOTES, 'UTF-8', false);
garantirá que isso não aconteça. Em seguida, use
html_entity_decode($string, ENT_QUOTES, 'UTF-8');
para exibir o valor. Demonstração:http://ideone.com/8Jo7YA
No entanto, o MySQL é totalmente capaz de armazenar os valores decodificados no banco de dados.
Você nunca quer ter strings codificadas em htmlentities armazenadas em seu banco de dados. O que acontece quando você deseja gerar um CSV ou PDF, enviar um e-mail ou qualquer coisa que não seja HTML?
Além do fato de você ter que executar o dobro da programação de codificação dos dados, aumentando a quantidade de dados no banco de dados, então ainda precisa decodificar a saída, existem toneladas de artigos online respondendo por que você não deveria.
Portanto, você só precisa codificar os valores para exibir a saída de dados resultante em html.
Em vez disso, você deve escapar da entrada usando
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) . "')";
ou melhor ainda, use declarações preparadas
$stmt = $mysqli->prepare("INSERT INTO links (link) VALUES(?)");
$stmt->bind_param("s", $string);
$stmt->execute();
Em seguida, formate a saída como uma mensagem de sucesso para exibir o que foi realmente adicionado ao banco de dados.
$html = "<div>Added Link: " . htmlentities($string, ENT_QUOTES, 'UTF-8', false) . "</div>";
Agora não há necessidade de usar
html_entity_decode
para ter o html renderizado no navegador.