我有一个150页的应用程序,只需说2000输入字段,textareas和选择框。现在所有输入字段都调用数据上的原始函数echo。
e.g。
<input type="text" name="in_county" value="<? echo $citiesRow["county"]; ?>">
实际上所有函数都应该调用类似
的东西<input type="text" name="in_county" value="<? echo htmlspecialchars($citiesRow["county"] , ENT_COMPAT , "ISO-8859-1"); ?>">
现在我可以访问所有150个页面并更改/替换所有2000个字段
现在好了,整个项目这样做很糟糕,对吧?
我想,我可以以某种方式覆盖回声功能(?)并且很好。或者搜索使用echo
mysaveechofunction()
来电
你的方法是什么?
红利问题: 有没有理由,不要在整个Web应用程序的所有回声上使用htmlspecialchars?
答案 0 :(得分:0)
您可以在代码的开头使用ob_start(),在代码的结尾使用ob_get_clean()。
ob_start()缓冲应显示的所有内容(echos,php标记之外的任何代码,print_r,var_dump等)。
ob_get_clean()结束缓冲并返回缓冲的所有内容,将其保存在变量中并根据需要进行操作。
答案 1 :(得分:0)
使用输出缓冲的问题是您还将删除所有有效的 html 标签。
我使用以下函数:
function _O($str) { return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); }
只在输出所有用户提交的字符串时使用它。
答案 2 :(得分:-1)
首先让我告诉你,你的眼睛非常好。 Autoescaping是PHP世界中最近发现的。非常有价值的。
其次,你应该考虑后备模式,你需要原始输出或一些不同的格式(因为htmlspecialchars不是一个银弹,你知道)。
现在问题。
不幸的是,无法自动启动开箱即用,可能是本机PHP模板的最大缺点之一。因此,即使是最大的支持者,我强烈建议您使用已经具有此功能的 Twig 。
但如果您仍想使用本机PHP,那么您将需要两件事
您将需要简单的模板处理程序,它允许您为模板设置变量并使用此数据集进行渲染。所以,有一个像这样的普通方法
tpl::set('name', $variable, FLAGS);
您可以设置模板变量并灵活控制它们的转义。