这是我的问题:
我用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
标题的东西总是在报价处切割:
<tr><td><span title='it'>Some Text</span></td></tr>
如果我在将$myString放入$wholeString之前尝试使用htmlentities或htmlspecialchar,它不会更改任何内容。。。我在某个地方错过了一些东西。。。
感谢的帮助
您基本上有一个html注入问题。您需要使用htmlspecialchar()来转义文本中的所有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
title='It' // attribute "title" with value "It"
s // unknown random attribute s
strange' // unknown random attribute "strange" with illegal single-quote