输出用户输入时,您是否只使用htmlspecialchars()或是否还有运行的功能/操作/方法?我正在寻找能够处理XSS的东西.
我想知道我是否应该编写一个在输出时转义用户输入或只是使用的函数htmlspecialchars().我正在寻找通用案例,而不是可以单独处理的具体案例.
基本上在显示来自MySQL数据库的数据时,我有一个htmlspecialchars()函数,它应该将单引号和双引号转换为它们的安全实体.我遇到的问题是查看源代码,它只在转换< > &时才需要转换单引号和双引号.
//sanitize data from db before displaying on webpage
function htmlsan($htmlsanitize){
return $htmlsanitize = htmlspecialchars($htmlsanitize, ENT_QUOTES, 'UTF-8');
}
Run Code Online (Sandbox Code Playgroud)
然后当我想用我做的时候:
htmlsan($row['comment']);
Run Code Online (Sandbox Code Playgroud)
有人能告诉我为什么它不会转换单引号和双引号吗?
UPDATE
有什么奇怪的htmlsan()是用在电子邮件中的评论中,当我查看电子邮件的源代码时,它会转换它们,似乎它不会在网页上显示时转换数据库中的单/双引号.我的数据库排序规则也设置为utf8_general_ci,我声明我在数据库连接等上使用utf8.
我正在使用htmlspecialchars()函数来防止XSS攻击.我怀疑从下面将数据存储在数据库中的更好方法是什么.
方法1:应用htmlspecialchars()函数后存储用户输入值.使用它,用户输入"<script>"将变为"< script>" .
方法2:按原样存储用户输入并htmlspecialchars()在检索数据并在页面上显示时应用方法.
我怀疑的原因是我相信使用方法1会在数据库上产生开销,而使用方法2数据需要在通过php请求时反复转换.所以我不确定哪一个更好.
有关更多信息,我正在使用,htmlspecialchars($val, ENT_QUOTES, "UTF-8")以便转换'和'.
请帮我清除疑惑.如果可能,还提供说明.
谢谢.
将文件保存在ISO-8859-1中并使用该命令时
echo "test: ".htmlspecialchars("äöü");
Run Code Online (Sandbox Code Playgroud)
返回将只是"测试:".
这是因为htmlspecialchars的标准字符集在PHP5.4中更改为UTF-8.您需要显式设置charset:
echo "test: ".htmlspecialchars("äöü", ENT_COMPAT | ENT_HTML401, 'ISO-8859-1');
Run Code Online (Sandbox Code Playgroud)
PHP5.4中是否还有其他功能,如果你没有设置charset,它将不再正常工作?
我无法使用C++中的tolower()函数将字符串转换为小写.使用普通字符串时,它会按预期工作,但不会成功转换特殊字符.
我如何使用我的功能:
string NotLowerCase = "Grüßen";
string LowerCase = "";
for (unsigned int i = 0; i < NotLowerCase.length(); i++) {
LowerCase += tolower(NotLowerCase[i]);
}
Run Code Online (Sandbox Code Playgroud)
例如:
你可以看到,3和4没有按预期工作
我该如何解决这个问题?我必须保留特殊字符,但是小写.
我有一个 HTML 表单,它使用 POST 将数据发送到 PHP 脚本。到目前为止,我还没有在 HTML 表单中使用数组,但该表单要求对某些字段进行分组(例如价格和数量),而其他字段仍然是单个输入字段(名称、电子邮件等)。
我想在 PHP 脚本收到输入时对其进行清理。对于单个输入字段,我曾经循环遍历这些字段,如下所示:
if( !empty($_POST) ) {
foreach( $_POST as $x => $y ) {
$_POST[$x] = htmlspecialchars($y);
$_POST[$x] = trim($y);
}
}
Run Code Online (Sandbox Code Playgroud)
当某些项目位于数组中时,如何清理输入?
假设我的项目始终是utf-8并且一直使用utf-8编码,如果我将所有出现的更改htmlspecialchars($var)为htmlspecialchars($var, ENT_QUOTES, 'utf-8')?有什么合法可能会破坏吗?
我知道一件事:显然,ENT_QUOTES不同之处ENT_COMPAT在于它也逃脱了单引号.假设我知道这一点不会破坏任何东西,还有什么遗留下来的吗?
措辞不同:
在没有charset参数的情况下使用htmlspecialchars()时是否存在可想象的结果,仅使用来自charset的数据,与 charset参数一起使用时与htmlspecialchars()不同?
(是,在任何时候,htmlspecialchars($stringThatIsValidUTF8, ENT_QUOTES) !== htmlspecialchars($stringThatIsValidUTF8, ENT_QUOTES, 'utf-8')?)
我的理解说不,永远不会.stackoverflow上的另一个问题也表明没有.到目前为止,使用更改浏览我的项目沙箱也说不.但是,我不确定我是否会忽略某些东西.
我需要&在这样的字符串中替换all和with :
Übung 1: Ü & Ä
Run Code Online (Sandbox Code Playgroud)
或者在HTML中
Übung 1: Ü & Ä
Run Code Online (Sandbox Code Playgroud)
就像你在字符串中看到htmlspecialchars(但是&没有显示为&),所以我需要将它们从我的替换中排除.我对正则表达式并不熟悉.我需要的只是一个表达式,它执行以下操作:
搜索&它可以跟随 (space) or does not follow some chars, excluding a space, which are ending with a ;.然后替换它&.
我试过这样的事情:
<cfset data = ReReplace(data, "&[ ]|[^(?*^( ));]", "&", "ALL") />
Run Code Online (Sandbox Code Playgroud)
但用$ amp替换每个字符; ... ^^'
对不起,我真的没有得到那个正则表达式的东西.
直升机,
尝试使用htmlspecialchars但似乎无法正常工作.. OSX 10.9.1 PHP 5.4.17
var_dump(htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES, 'UTF-8'));
echo htmlspecialchars("<a href='test'>Test</a>", ENT_XHTML, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)
得到:
string '<a href='test'>Test</a>' (length=45)
<a href='test'>Test</a
Run Code Online (Sandbox Code Playgroud)
任何的想法 ?THK.
我正在开发一个应用程序,我需要在其中使用一些数学特殊字符.经过长时间的谷歌搜索,我找到了以下解决方案,即如何在TextView,EditView或其他Android UI元素中放置一些特殊的数学符号.根据上面的链接,如果我使用textview意味着它工作正常.但是如何在listview中使用以下"HTML.frommHtml()".我试过但是它得到了错误......
代码:(使用Textview)
//by using textview
String htmlStringWithMathSymbols = " ∂ ∆ ∏ ∑ = ≠ ≈ ≡";
txtv.setText(Html.fromHtml(htmlStringWithMathSymbols));
Run Code Online (Sandbox Code Playgroud)
如何在listview中使用以下"HTML.frommHtml()".当我为listview添加相同的代码时,它会收到错误...
代码:(使用ListView)
//by using listview
String[] andi={"andi 4","andi 5" , "∂" , "∆","∏"};
ArrayAdapter<String> adp = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, andi);
lv.setAdapter(Html.fromHtml(adp));
Run Code Online (Sandbox Code Playgroud)
在使用listview代替"fromHtml()"时,它显示错误为"Html类型中的fromHtml(String)方法不适用于参数(ArrayAdapter)".
那么如何使用以下"Html.fromHtml()"代码与listview或spinner ....