Selon Stefan Esser, "mysql_real_escape_string()
[n'est] pas sûr lorsque SET NAMES
est utilisé."
Son explication, sur son blog :
SET NAMES est généralement utilisé pour changer l'encodage de ce qui est par défaut à ce dont l'application a besoin. Ceci est fait d'une manière que
mysql_real_escape_string
ne sait pas à ce sujet. Cela signifie que si vous passez à un encodage multi-octets qui autorise la barre oblique inverse comme 2e 3e 4e… octet, vous rencontrez des problèmes, carmysql_real_escape_string
ne s'échappe pas correctement. UTF-8 est sûr…Un moyen sûr de changer l'encodage est
mysql_set_charset
, mais cela n'est disponible que dans les nouvelles versions de PHP
Il mentionne cependant que l'UTF-8 est sûr.