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) 的简单引号转义问题的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript之Ajax-2 Ajax(使用Ajax发送get请求使用Ajax发送post请求)