据我了解,撇号(单引号)的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
请参阅下面的解决方案。
答案 0 :(得分:0)
据我了解,撇号(单引号)的html实体版本为
'
。
你理解不正确。 '
是正确的(快速测试表明浏览器同时理解这两者,但您的数据库会将它们视为不同的字符串)。
您还应该考虑在显示器上进行编码,而不是在保存到数据库时,这样可以防止差异。 PHP文档似乎表明某些版本输出'
而其他版本输出'
。
答案 1 :(得分:0)
最后似乎是$hotelname = $_GET['hotelname'];
$hotelname = htmlentities($hotelname, ENT_QUOTES);
$hotelname = mysqli_real_escape_string($db,$hotelname);
是罪魁祸首。它正在删除'。
我想我现在已经通过改用
解决了这个问题Orchard.Exceptions.IExceptionPolicy