据我了解,撇号(单引号)的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似乎什么也不做,它用撇号与版本相呼应。
标点符号和口音总是把我逼疯,但这比平时更糟。是我吗?(无疑是这样。)
编辑
下面看看我的解决方案。
发布于 2015-06-08 17:42:27
据我了解,撇号(单引号)的html实体版本是
'。
你理解错了。'是正确的(快速测试表明浏览器两者都理解,但您的DB将考虑它们不同的字符串)。
您还应该考虑在显示上进行编码,而不是在保存到数据库时,这将完全避免差异。PHP似乎表明一些版本输出',而另一些版本输出'。
发布于 2015-06-09 10:05:44
最终看来,罪魁祸首似乎是FILTER_SANITIZE_STRING。它正在从‘中删除0。
我想我现在已经解决了这个问题
$hotelname = $_GET['hotelname'];
$hotelname = htmlentities($hotelname, ENT_QUOTES);
$hotelname = mysqli_real_escape_string($db,$hotelname);https://stackoverflow.com/questions/30715605
复制相似问题