我目前正在加强我网站的安全性,我正在努力确保从 PHP 传递到 HTML 的每个值都经过正确编码。
目前,为模板赋值会对其进行编码,但是网站的某些部分是旧的并且不使用模板。
我更改了用于输出 HTML 的函数的工作方式以对所有值进行编码。这对于覆盖所有旧页面非常有效,但现在会导致模板值双重编码。
我改变了我用来做的编码函数:
$textToEncode = htmlspecialchars_decode($szText);
return htmlspecialchars($textToEncode, ENT_COMPAT, 'ISO-8859-1');
据我所知,这是有效的。通过首先对其进行解码,它将始终确保它不会进行双重编码,而且我想不出解码未编码的字符串会导致问题的任何原因。这是一个好的解决方案吗?
最佳答案
如果您查看手册,您会发现您正在寻找的是函数的最后一个参数 - $double_encode
= false ,默认情况下为 true:
string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]]
因此:
htmlspecialchars($textToEncode, ENT_COMPAT, 'ISO-8859-1', false);
关于php - 避免意外的双 htmlspecialchars 编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16646577/