2010-11-16 7 views
0

Le string-Escaping & (caractères spéciaux) dans MySql ou PHP

<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/ebopIWPoXI0?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/ebopIWPoXI0?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object> 

Ce qui est stocké dans la base de données -

<object width=\"480\" height=\"385\"><param name=\"movie\" value=\"http://www.youtube.com/v/ebopIWPoXI0?fs=1 

Vous utilisez déjà - mysql_real_escape_string(), ce qui ne contribue pas à la & :

$_POST['desc'] = mysql_real_escape_string($_POST['desc']); 
mysql_query('INSERT INTO user_showcase(title, description, user_id, date_n_time) VALUES("'.$_POST['title'].'", "'.$_POST['desc'].'", "'.$_SESSION['uid'].'", NOW())') or die(mysql_error()); 
mysql_close($con); 

Le HTML -

<textarea id="desc_in" cols="40" rows="10"></textarea> 
+0

Vous n'avez pas besoin d'échapper à la '' et pour MySQL. – Gumbo

+2

Vous ne nous dites pas comment vous le stockez là. Je ne peux pas penser à quoi que ce soit du côté MySQL qui devrait réagir au &. Il est bizarre d'utiliser des entités HTML dans une URL - cela devrait probablement être un URI échappé (comme dans une autre question). Mais je ne vois pas quelle pertinence cela aurait pour ce problème. –

+0

Hmmm .. alors quel pourrait être le problème ici? – Sussagittikasusa

Répondre

1

mysql_real_escape_string() est le mécanisme approprié si vous utilisez l'héritage bibliothèque MySQL. Si vous obtenez tous ces backslashes supplémentaires, c'est probablement parce que votre environnement PHP est très ancien. Exécutez <?php phpinfo(); ?> et trouver les directives qui commencent par magic_:

magic_quotes_gpc 
magic_quotes_runtime 
magic_quotes_sybase 

Idéalement, ils devraient tous être désactivés. Si vous exécutez PHP en tant que module Apache, vous pouvez le modifier dans un fichier .htaccess:

php_flag magic_quotes_gpc Off 
php_flag magic_quotes_runtime Off 
php_flag magic_quotes_sybase Off 

Si vous exécutez PHP comme CGI, vous aurez probablement un fichier sur mesure php.ini quelque part dans votre compte.

Comme déjà mentionné, & n'est pas un caractère spécial pour MySQL.

Réponse à la question mise à jour

Le séparateur de chaîne standard dans SQL est la seule citation, pas le guillemet:

SELECT 'I am a string'; 
+0

Je les ai désactivés, mais je suis confronté au même problème. – Sussagittikasusa

+0

Etes-vous sûr que ce n'est pas * vous * celui qui injecte les barres obliques inverses? –

+0

Après avoir désactivé les guillemets magiques, les barres obliques inverses disparaissent, mais les données stockées dans la base de données se terminent toujours à l'adresse "& amp". – Sussagittikasusa

-1

Vous devez utiliser une requête paramétrées

+0

hmmm ... qu'est-ce que c'est? – Sussagittikasusa

+0

Vous avez sérieusement downvoted moi parce que vous êtes trop stupide pour savoir ce qu'est une requête paramétrée? Wow, je me souviens maintenant pourquoi je ne fais pas affaire avec les développeurs PHP ... –

Questions connexes