sql >> Base de Datos >  >> RDS >> Mysql

PHP MySQL cómo almacenar correctamente/cadena de escape

Asegúrese de establecer el double_encode a false , de lo contrario, las cadenas ya codificadas se codificarán nuevamente, cambiando & en & . Luego, cuando vaya a mostrarlo después de usar html_entity_decode , aparecerá como si todavía estuviera codificado.

Resultado no deseado:http://ideone.com/uQxuAM

Usando htmlentities($string, ENT_QUOTES, 'UTF-8', false); se asegurará de que esto no suceda.

Luego use html_entity_decode($string, ENT_QUOTES, 'UTF-8'); para mostrar el valor.

Demostración:http://ideone.com/8Jo7YA

Sin embargo, MySQL es totalmente capaz de almacenar los valores decodificados en la base de datos.

Nunca querrá tener cadenas codificadas con htmlentities almacenadas en su base de datos. ¿Qué sucede cuando desea generar un archivo CSV o PDF, enviar un correo electrónico o cualquier cosa que no sea HTML?

Aparte del hecho de que tiene que realizar el doble de programación para codificar los datos, aumentando la cantidad de datos en la base de datos, y aún necesita decodificar la salida, hay toneladas de artículos en línea que responden por qué no debería hacerlo.

Por lo tanto, solo debería necesitar codificar los valores para mostrar la salida de datos resultante en html.

En su lugar, debe escapar de la 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) . "')";

o mejor aún, use declaraciones preparadas

$stmt = $mysqli->prepare("INSERT INTO links (link) VALUES(?)");
$stmt->bind_param("s", $string);
$stmt->execute();

Luego, para formatear la salida como un mensaje de éxito para mostrar lo que realmente se agregó a la base de datos.

$html = "<div>Added Link: " . htmlentities($string, ENT_QUOTES, 'UTF-8', false) . "</div>";

Ahora no hay necesidad de usar html_entity_decode para tener el html renderizado en el navegador.