来自hmmlentities的奇怪行为

时间:2015-06-08 17:35:24

标签: php html-entities

据我了解,撇号(单引号)的html实体版本为'

这就是我向数据库添加数据时的编码方式。但是,当我尝试搜索数据库时,我遇到了问题,因为我使用的代码将撇号设为',即零丢失。

我已将页面剥离到最基本的测试代码位:

$hotelname = filter_input(INPUT_GET, 'hotelname', FILTER_SANITIZE_STRING);
//$hotelname = "Auberge de l'Etang Bleu";
$hotelname = htmlentities($hotelname,ENT_QUOTES,"UTF-8");
echo $hotelname;
exit();

为什么会这样做?是不是有不同版本的PHP或类似的东西?

为了进一步混淆水域,如果我注释掉第一行并取消评论第二行,htmlentities似乎什么都不做,它会使用撇号回显版本。

标点符号和口音总让我发疯,但这比平常更糟糕。那是我吗? (毫无疑问是。)

EDIT
请参阅下面的解决方案。

2 个答案:

答案 0 :(得分:0)

  

据我了解,撇号(单引号)的html实体版本为'

你理解不正确。 '是正确的(快速测试表明浏览器同时理解这两者,但您的数据库会将它们视为不同的字符串)。

您还应该考虑在显示器上进行编码,而不是在保存到数据库时,这样可以防止差异。 PHP文档似乎表明某些版本输出'而其他版本输出'

答案 1 :(得分:0)

最后似乎是$hotelname = $_GET['hotelname']; $hotelname = htmlentities($hotelname, ENT_QUOTES); $hotelname = mysqli_real_escape_string($db,$hotelname); 是罪魁祸首。它正在删除'。

中的0

我想我现在已经通过改用

解决了这个问题
Orchard.Exceptions.IExceptionPolicy