使用PHP动态删除javascript代码中的函数调用
Remove function calls from javascript code dynamically using PHP
我想在运行时使用php从javascript源代码中删除一个无效的特定函数(不返回任何内容)。考虑以下js代码,它应该由php输出:
var a = func1(x1);
func2(a + ": " + x1);
// other codes
func2(someOther("Lol") + x1);
// other codes
这里我想删除func2
(它有点像一个日志函数,它向js控制台输出一些东西)。
现在,我想到的第一件事是编写一个正则表达式,并使用preg_replace
将其替换为空字符串。但我没有成功地定义正确的表达方式。我想知道是否可以编写一个正则表达式来匹配函数调用?如果是的话,你能给我一些提示或例子吗?这样我就可以使用它了?
如果你认为还有另一种方法,我很乐意听听你的意见。
票据
- 该函数不用于复杂的结构,如
if
条件等。(我的意思是,您不需要考虑这些情况) - 可以调用该函数中的其他函数(作为参数)
- 我不能更改js代码。(由其他人提交)
如果你想让全局函数"func2"完全消失,你可以确保你的页面以:结束
<script> window.func2 = undefined; </script>
如果有依赖于现有函数的代码,您可以执行:
<script> window.func2 = function() {}; </script>
现在,假设函数是以某种正常的方式定义的,并且您放在正文末尾的代码将在最初定义函数的代码运行后运行。如果函数是由更动态的东西定义的,那么事情就会变得更复杂。
无论如何,试图编写"编辑"某些JavaScript代码的代码最终要么极其脆弱,要么是一个涉及完整JavaScript解析器的项目。服务器应用程序本身存在争论,这听起来有些不正常。
实现这一点的基本正则表达式是:
$result = preg_replace('~'bfunc2's*('((?>[^()]++|(?1))*'));?~', '', $code);
但是:它不处理引号中的括号。要做到这一点,您必须使用:
~'bfunc2's*('((?>[^()"']++|"(?>[^"'']++|''{2}|''.)*"|'(?>[^''']++|''{2}|''.)*'|(?1))*'));?~s
作为模式(不要忘记转义您使用的引号)。
相关文章:
- PHP函数调用和Javascript代码中的数组传递
- Javascript渲染.如何编写Javascript;t在函数调用结束之前继续执行代码
- 在PHP代码中单击链接javascript函数调用
- 无法访问字段'通过aspx页面上的javascript函数传递来自代码隐藏中函数调用的客户端id的s值(页面加载
- Dijkstra's”;针对GOTO声明的案件“;与函数一样适用于现代调用代码的命名封装
- 使用命名的自调用函数简化代码
- 当其他函数调用Javascript时运行我的代码
- 使用PHP动态删除javascript代码中的函数调用
- 为什么 Javascript 函数调用在从代码隐藏更改可见性后不起作用
- 向每个函数调用添加代码的任意方法
- 使用 ajax 调用代码隐藏函数
- 从 JavaScript 函数调用 C# 方法背后的代码时出错
- 如何使用源映射从转译的代码中隐藏函数调用
- 从 JavaScript 调用代码隐藏函数,该函数可能会返回另一个 JavaScript 函数
- 只有从html set onclick事件调用代码声明函数时,该函数才不存在
- 如何从javascript函数中调用代码隐藏方法
- 调用javascript函数从代码后面打印表单
- 扩展本机函数以在函数调用时运行代码
- Safari在服务器端的刷新/加载前不运行回调函数(调用客户端代码)
- 如何使用java脚本函数中的参数调用代码隐藏函数