我有以下代码:
<?
$string="< input type=button value='Open' onclick='document.location.href=\"".format_URL("phpfolder",$sesion)."objects/construct.php?id_object=$id_object\"' >";
mysql_query( "insert into db (code) values ('$string')" );
?>
当使用$string=mysql_real_escape_string($string);
转义时,结果为
$string=\"< input type=button value=\'Open\' onclick=\'document.location.href=\"\".format_URL(\"phpfolder\",$sesion).\"objects/construct.php?id_object=$id_object\"\' >\";
它应该是这样的:
$string=\"< input type=button value=\'Open\' onclick=\'document.location.href=\\\"\".format_URL(\"phpfolder\",$sesion).\"objects/construct.php?id_object=$id_object\\\"\' >\";
为什么mysql_real_escape_string()不能识别它必须转义\""
的第一个反斜杠才能将其转换为\\\"\"
?
这是PHP中的错误吗?
我试图应用诸如addslashes,html_entities,str_replace,preg_replace等函数。没有任何工作正常,或者我使用它错了。
该怎么做?
答案 0 :(得分:0)
不要使用 mysql _ * 功能。只需使用准备好的语句,你就不会遇到这个问题。以下是PDO中的一个示例:
$stmt = $pdoObject->prepare('INSERT INTO MyTable (code) VALUES (:code)');
$stmt->bindParam(':code', $string, PDO::PARAM_STR);
if ($stmt->execute()) {
echo 'Success';
} else {
echo 'Failure';
}
就这么简单。更清洁&amp;更安全的代码。
现在主要问题是将整个html / js保存到表中。你的桌子在大小方面会变得非常快。为什么不把基本的ID或属性保存到表格中?通过从表中检索来构建该HTML。
你应该只保存$session
&amp; $id_object
进入你的桌子。使用这两个变量,您可以在之后构建html。
答案 1 :(得分:0)
反斜杠在转移到$ string变量时转出双引号。
<?php
$string = "< input type=button value='Open' onclick='document.location.href=\"".'url_output'."objects/construct.php?id_object=id_object\"' >";
echo $string;
输出:
< input type=button value='Open' onclick='document.location.href="url_outputobjects/construct.php?id_object=id_object"' >
因此,当它作为mysql_real_escape_string的参数给出时,反斜杠就不会开始了。
双引号位于字符串文字的双引号分隔符中,因此前面的反斜杠就是转义赋值运算符的双引号。
简化示例:
<?php
$string = "This is a \"string literal\"";
echo $string;
输出:
This is a "string literal"