来自 htmlentities 的奇怪行为

Strange Behaviour From htmlentities

据我了解,撇号(单引号)的 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 似乎什么都不做,它与带撇号的版本相呼应。

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

编辑
请参阅下面我的解决方案。

As I understand it, the html entity version of an apostrophe (single quote) is '.

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

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

最后似乎是 FILTER_SANITIZE_STRING 才是罪魁祸首。它正在从 '.

中删除 0

我想我现在已经通过改用

解决了这个问题
$hotelname = $_GET['hotelname'];
$hotelname = htmlentities($hotelname, ENT_QUOTES);
$hotelname = mysqli_real_escape_string($db,$hotelname);