我一直在使用脚本将文章上传到我的网站并进行了一些维护,现在当我在服务器上添加一篇文章时,它会在我的文本中添加斜杠。这是我正在使用的代码:
$con = mysqli_connect("localhost","db_username","db_password","db_database");
$title = ucwords($_POST['title']);
$category = $_POST['category'];
$article = $_POST['article'];
$alt = $_POST['alt'];
$title = mysqli_real_escape_string($con, $title);
$article = mysqli_real_escape_string($con, $article);
$alt = mysqli_real_escape_string($con, $alt);
$insert_post_sql = "INSERT INTO ".$site_id."_articles (id, category, photo, alt, title, article, added, views) VALUES('$id', '$category', '.$extension', '$alt', '$title', '$article', '$added', '$views')";
$insert_post_res = mysqli_query($con, $insert_post_sql);
if(mysqli_affected_rows($con)>0){
move_uploaded_file($_FILES["photo"]["tmp_name"],"$path" . $id . "." . $extension);
header("Location: ../article.php?id=$id");
exit();
}
else{
echo "0";
};
所以我的文章文字如下:Here\'s my article\'s text
有谁能告诉我为什么逃避不起作用?
答案 0 :(得分:1)
谁能告诉我为什么逃避不在这里?
mysqli_real_escape_string()
可能会根据需要执行“转义”,但“在我的文本中添加斜杠”不是mysqli_real_escape_string()
确实。
不要指望它修改代码,或添加反斜杠。它只是在添加到数据库时逃避字符。
mysqli_real_escape_string()
以外的其他内容正在为文本添加斜杠。
转义字符串中的特殊字符以在SQL语句中使用,同时考虑连接的当前字符集
。
当我在这里上传时,它会在文本中添加斜杠\它正在做什么
如果您没有在脚本中手动编码以使用反斜杠进行转义,例如使用函数addslashes(),那么正如@zerkms建议的那样,可能是您已启用magic quotes,这样做“ “通过自动添加反斜杠来逃避。
Determine if magic quotes are enabled
如果您启用了魔术引号,请阅读:Why not to use magic quotes
使用stripslashes()
的建议很可能会使这个问题“消失”,但它不会解决潜在的问题,也不会尝试再次使用魔法引号解决您的潜在问题{ {3}}。
仅Why not to use magic quotes,用于解决此问题,其他安全问题,以及它已被弃用的事实,您不应在代码中使用它,这些代码可能无法在较新的服务器或服务器更新中运行。< / p>
如果您启用了魔术引号,那么现在浪费资源来自魔术引号添加斜杠并stripslashes()
删除它们。
这不是解决方案,而是“躲闪” 如果你对此感到满意,那么根本不用担心,但我认为这个方法根本就不是好的做法。