【问题标题】:PHP passing argument to a function inside preg_replacePHP将参数传递给preg_replace中的函数
【发布时间】:2011-04-02 09:51:44
【问题描述】:

您好,我有这样的事情:

$content = preg_replace('#(\s*)\<pre(.*?)\>(.*?)\</pre\>(\s*)#sie', 'dostuff(\'\\3\', \'\\2\', $content, \'\', \'\\1\', \'\\4\');', $content);

$content = preg_replace('#(\s*)\<code(.*?)\>(.*?)\</code\>(\s*)#sie', 'dostuff(\'\\3\', \'\\2\', $content, \'\', \'\\1\', \'\\4\');', $content);

如何根据正则表达式的元素将真/假参数传递给内部的 dostuff 函数?如果&lt;pre&gt; 为真,&lt;code&gt; 为假?

【问题讨论】:

  • 这太不安全了!
  • 我发布的代码或我想要实现的目标?
  • 您的代码。根据经验:永远不要使用e-修饰符或eval。有例外,但很少见。现在我可以做一个简单的&lt;code&gt;', eval(My code goes here), '&lt;/code&gt; 并且会为您的站点提供一个不错的任意代码执行控制台;)
  • 我有个借口:不是我写的 :) 我正在尝试为我的网站创建一个简单的语法荧光笔,这就是我迄今为止通过谷歌找到的内容
  • 为什么不使用 preg_match_all() 来获取所有匹配项而不是使用结果?

标签: php html regex string


【解决方案1】:

为什么不在你的正则表达式中使用(pre|code)?您可以使用 $n\n 引用 HTML 标记的名称并将其用作 dostuff() 的参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多