Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PHP MySQL como armazenar corretamente / escapar string


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.