Php 将反斜杠双引号与双引号组合起来进行转义?(即""")

Php 将反斜杠双引号与双引号组合起来进行转义?(即"""),php,mysql,regex,mysql-real-escape-string,Php,Mysql,Regex,Mysql Real Escape String,我有以下代码: <? $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="< 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=\"< input type=button value=\'Open\' onclick=\'document.location.href=\\\"\".format_URL(\"phpfolder\",$sesion).\"objects/construct.php?id_object=$id_object\\\"\' >\";
$string=\”\;
为什么mysql\u real\u escape\u string()无法识别它必须转义
\\”
的第一个反斜杠才能将其转换为
\\\”

这是PHP中的一个bug吗

我尝试过应用addslashes、html_entities、str_replace、preg_replace等函数。没有任何东西能像预期的那样工作,或者我用错了


方法是什么?

不要使用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';
}
就这么简单。更干净、更安全的代码

现在的主要问题是将整个html/js保存到表中。您的桌子将以非常快的速度变大。为什么不将基本ID或属性保存到表中&通过从表中检索来构建html


您应该只将
$session
$id\u对象
保存到表中。使用这两个变量,您可以在之后构建html。

反斜杠是在赋值给$string变量时转义双引号

<?php

$string = "< input type=button value='Open' onclick='document.location.href=\"".'url_output'."objects/construct.php?id_object=id_object\"' >";

echo $string;

我不明白
$string中的第一个反斜杠在哪里=\“
来自。这个引号不是字符串的一部分,它是PHP字符串周围的分隔符。我同意Barmar的观点:从您发布的代码中,我不明白为什么
mysql\u real\u escape\u string
函数会添加反斜杠和双引号字符。基于第一个
$string=“我的错误是,$字符串位于我正在处理的php代码编辑器项目的文本区域内。这就是我在这种情况下需要转义的原因。代码编辑器项目是为我们部门的开发人员提供的,因此他们不需要访问服务器来上传或下载代码脚本。这样我就可以强制执行安全问题并保存完整的代码版本。在封闭的环境中,所需的数据库数量没有问题。至于准备好的声明,我会研究一下。你有没有可以分享或参考的PHP示例?这是意料之中的事情。我还没有和PDO一起工作过,我会试着看看它的范围。
<?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"' >
<?php

$string = "This is a \"string literal\"";

echo $string;
This is a "string literal"