字符串 -
<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/ebopIWPoXI0?fs=1&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&hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object>
存储在数据库中的内容 -
<object width=\"480\" height=\"385\"><param name=\"movie\" value=\"http://www.youtube.com/v/ebopIWPoXI0?fs=1
已经使用 - mysql_real_escape_string()
,这对&
无效:
$_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);
HTML -
<textarea id="desc_in" cols="40" rows="10"></textarea>
答案 0 :(得分:1)
mysql_real_escape_string()是正确的机制。如果你得到所有这些额外的反斜杠,可能是因为你的PHP环境很老了。运行<?php phpinfo(); ?>
并找到以magic_
开头的指令:
magic_quotes_gpc
magic_quotes_runtime
magic_quotes_sybase
理想情况下,他们都应该被禁用。如果您将PHP作为Apache模块运行,则可以在.htaccess
文件中更改它:
php_flag magic_quotes_gpc Off
php_flag magic_quotes_runtime Off
php_flag magic_quotes_sybase Off
如果您将PHP作为CGI运行,那么您的帐户中可能会有一个自定义php.ini
文件。
如前所述,&
不是MySQL的特殊字符。
SQL中的标准字符串分隔符是单引号,而不是双引号:
SELECT 'I am a string';
答案 1 :(得分:-1)
您应该使用参数化查询