pdo-php-javascript (ajax) 的简单引号转义问题

Posted

技术标签:

【中文标题】pdo-php-javascript (ajax) 的简单引号转义问题【英文标题】:simple quote escape issue with pdo-php-javascript (ajax) 【发布时间】:2014-12-03 06:32:17 【问题描述】:

这是我的问题:

我在 php 脚本(在 ajax 查询中调用)中使用 PDO 从我的数据库中返回一个字符串:

...some code
$myString = $pdoObject['field'];
...some code

字符串包含一个单引号:'

example :
          it's strange

稍后在这个 php 脚本中,我将字符串放入一个长字符串变量中,然后发送回我的 ajax 查询:

$wholeString = "<tr><td><span title='$myString'>Some Text</span></td></tr>";

然后我把它寄回去: json_encode($wholeString);

在我的 ajax 查询中,我只是将结果放入 jquery 字段中:

...some code
success : function(response)
    $("#myField").html(response);

...some code

TITLE 的东西总是在引用处被删减:

<tr><td><span title='it'>Some Text</span></td></tr>

如果我在将 $myString 放入 $wholeString 之前尝试使用 htmlentities 或 htmlspecialchars,它不会改变任何东西......我在某处错过了一些东西......

感谢帮助

【问题讨论】:

【参考方案1】:

你基本上有一个 html 注入问题。您需要使用 htmlspecialchars() 来转义文本中的所有 html 元字符,其中包括 '

例如

$wholeString = "<tr><td><span title='" . htmlspecialchars($myString, ENT_QUOTES) . "'>Some Text</span></td></tr>";

如您的代码中所写,您将生成:

<tr><td><span title='It's strange'>Some text etc...

这会导致浏览器将 span 标签解析为

<span
   title='It'    // attribute "title" with value "It"
   s             // unknown random attribute s
   strange'      // unknown random attribute "strange" with illegal single-quote

【讨论】:

是的,我同意你的回答,但是,在我的代码中,如果我将 '$myString' 替换为 '".htmlspecialchars($myString)."',结果是完全一样的。 ..没有任何变化 啊,哦……对不起。忘记了 specialchars 默认情况下不执行 ' 。你必须使用htmlspecialchars($text, ENT_QUOTES) 谢谢,这解决了我的问题 :) (我只能在几分钟内接受答案,我得走了,我会尽快做的;))

以上是关于pdo-php-javascript (ajax) 的简单引号转义问题的主要内容,如果未能解决你的问题,请参考以下文章

jQuery中的ajax问题

JavaScript之Ajax-2 Ajax(使用Ajax发送get请求使用Ajax发送post请求)

Ajax01 什么是ajax获取ajax对象ajax对象的属性和方法

AJAX和JSON—ajax

Ajax&Json —— Ajax

AJAX基础教程