来自 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 '
.
你理解错了。 '
是正确的(快速测试表明浏览器可以理解两者,但您的数据库会将它们视为不同的字符串)。
- http://www.fileformat.info/info/unicode/char/27/index.htm
- http://en.wikipedia.org/wiki/Apostrophe#Unicode
您还应该考虑在显示时进行编码,而不是在保存到数据库时进行编码,这样根本不会造成差异。 PHP 文档似乎表明某些版本输出 '
而其他版本输出 '
.
最后似乎是 FILTER_SANITIZE_STRING
才是罪魁祸首。它正在从 '.
中删除 0
我想我现在已经通过改用
解决了这个问题
$hotelname = $_GET['hotelname'];
$hotelname = htmlentities($hotelname, ENT_QUOTES);
$hotelname = mysqli_real_escape_string($db,$hotelname);
据我了解,撇号(单引号)的 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
'
.
你理解错了。 '
是正确的(快速测试表明浏览器可以理解两者,但您的数据库会将它们视为不同的字符串)。
- http://www.fileformat.info/info/unicode/char/27/index.htm
- http://en.wikipedia.org/wiki/Apostrophe#Unicode
您还应该考虑在显示时进行编码,而不是在保存到数据库时进行编码,这样根本不会造成差异。 PHP 文档似乎表明某些版本输出 '
而其他版本输出 '
.
最后似乎是 FILTER_SANITIZE_STRING
才是罪魁祸首。它正在从 '.
我想我现在已经通过改用
解决了这个问题$hotelname = $_GET['hotelname'];
$hotelname = htmlentities($hotelname, ENT_QUOTES);
$hotelname = mysqli_real_escape_string($db,$hotelname);