首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ENT_QUOTES不起作用吗?

ENT_QUOTES不起作用吗?
EN

Stack Overflow用户
提问于 2011-01-18 10:01:29
回答 5查看 28.1K关注 0票数 9

基本上,在显示来自MySQL数据库的数据时,我在下面有一个htmlspecialchars()函数,它应该将单引号和双引号转换为它们的安全实体。我遇到的问题是查看源代码,只有当我需要它来转换单引号和双引号时,它才会转换< > &

代码语言:javascript
复制
//sanitize data from db before displaying on webpage
function htmlsan($htmlsanitize){
    return $htmlsanitize = htmlspecialchars($htmlsanitize, ENT_QUOTES, 'UTF-8');
}

然后,当我想使用(例如)时:

代码语言:javascript
复制
htmlsan($row['comment']);

有人能告诉我为什么不转换单引号和双引号吗?

更新

奇怪的是,htmlsan()用于电子邮件中的评论,当我查看电子邮件源代码时,它似乎不会在网页上显示数据库中的单引号/双引号。我的数据库排序规则也被设置为utf8_general_ci,并且我声明在数据库连接等方面使用utf8。

EN

回答 5

Stack Overflow用户

发布于 2011-01-18 10:17:00

你到底是怎么测试它的?

代码语言:javascript
复制
<?php

//sanitize data from db before displaying on webpage
function htmlsan($htmlsanitize){
    return $htmlsanitize = htmlspecialchars($htmlsanitize, ENT_QUOTES, 'UTF-8');
}

var_dump(htmlsan('<>\'"'));

..。指纹:

代码语言:javascript
复制
string(20) "&lt;&gt;&#039;&quot;"

我猜您的输入字符串来自Microsoft,包含印刷引号:

代码语言:javascript
复制
var_dump(htmlsan('“foo”')); // string(9) "“foo”" 

如果您确实需要以任何理由转换它们,则需要htmlentities()而不是htmlspecialchars()

代码语言:javascript
复制
var_dump(htmlentities('“foo”', ENT_QUOTES, 'UTF-8')); // string(17) "&ldquo;foo&rdquo;"

更新#1

好了,是时候做些适当的测试了。在您的'数据库字段中键入单引号( comment ),并在检索它时运行以下代码:

代码语言:javascript
复制
var_dump(bin2hex("'"));
var_dump(htmlspecialchars("'", ENT_QUOTES, 'UTF-8'));
var_dump(bin2hex($row['comment']));
var_dump(htmlspecialchars($row['comment'], ENT_QUOTES, 'UTF-8'));

它应该打印如下:

代码语言:javascript
复制
string(2) "27"
string(6) "&#039;"
string(2) "27"
string(6) "&#039;"

请更新您的问题,并确认您是否运行了此测试,并获得了相同或不同的输出。

更新#2

请仔细查看您声称获得的输出:

代码语言:javascript
复制
string(6) "'"

那不是一个有6个字符的字符串。您没有查看真正的输出:您正在查看由浏览器呈现的呈现的输出。我很肯定你得到了预期的结果,也就是string(6) "&#039;"。如果您使用web浏览器呈现&#039;,则它将成为'。使用浏览器中的“查看源”菜单查看实际输出。

票数 11
EN

Stack Overflow用户

发布于 2011-01-19 14:36:23

当您使用Firebug查看源代码时,Firebug显示它就像web浏览器显示它一样,我认为它会显示源代码,就像在浏览器菜单栏中查看源代码一样。头痛已经学会,并将被记住。感谢大家宝贵的时间和投入。

票数 4
EN

Stack Overflow用户

发布于 2011-01-18 10:04:42

不确定这是否会产生任何不同,但您是否尝试删除$htmlsanitize

代码语言:javascript
复制
function htmlsan($htmlsanitize){
    return htmlspecialchars($htmlsanitize, ENT_QUOTES, 'UTF-8');
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4722727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档