我有一个textarea,它将接收一个js片段(Google Analytics)。有没有办法净化?既然我不能使用像wp\\u filter\\u nohtml\\u kse()这样的函数,我应该使用什么?
我如何清理一个javascript文本?
3 个回复
最合适的回答,由SO网友:fuxia 整理而成
不,没有这个功能。您需要一个完整的JavaScript解析器。这不是WordPress核心的一部分。
SO网友:Ben Miller - Remember Monica
一种简单的方法是让用户只输入他或她的Google Analytics属性ID,而不是让他们输入整个JavaScript代码。然后您自己生成代码段,使用其属性ID。
根据this Google help page, 以下是当前分析跟踪代码:
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push([\'_setAccount\', \'UA-XXXXX-Y\']);
_gaq.push([\'_trackPageview\']);
(function() {
var ga = document.createElement(\'script\'); ga.type = \'text/javascript\'; ga.async = true;
ga.src = (\'https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';
var s = document.getElementsByTagName(\'script\')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
“UA-XXXXX-Y”是属性ID。看起来前两个字符总是“UA”XXXXX\'表示一定数量的数字(不一定是五位数,因为我的站点的一个属性ID有八位数)。\'Y’是一个可能有多个数字的整数。验证属性ID的一种方法是使用正则表达式,如下所示:
preg_match(\'/^UA-[0-9]+-[0-9]+$/\', $input);
如果$input是有效的属性ID格式,则返回1;如果不是,则返回false。SO网友:Ben Miller - Remember Monica
如果您想让用户能够输入自己的Javascript代码,但不想让他们输入任何HTML,您可以使用以下方法:
preg_match( \'/\\A<script((?!<[a-zA-Z])[\\s\\S])*</script>\\Z/\', trim($input) );
trim函数从开头和结尾删除空格,并且regex模式仅在以“<;开头时匹配字符串;“脚本”,以“<;结尾/脚本(>;\',没有任何“<;”紧跟字母的字符。这将有效地防止任何游离的HTML,同时允许用户在出于某种原因需要时使用小于运算符来放置一些Javascript代码。我要做的另一件事是确保只有管理员才能设置此选项,如果他或她在其中偷偷插入一些HTML并破坏自己的网站,那是他们自己的错。当然,如果这要进入数据库,请确保已针对SQL对其进行了清理。
结束