问题标签 [preg-replace-callback]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
191 浏览

php - 替换所有未包含在 OPEN 和 CLOSE 中的特定单词的出现?

我有以下字符串:

OPEN有人打招呼CLOSE我正在打招呼人们OPEN有人打招呼OPEN他们再次打招呼CLOSE我现在得走了 虽然CLOSE又打招呼了!

我正在尝试匹配所有出现的hello(未包含在OPENCLOSE单词中)并将它们替换为另一个单词,可能使用正则表达式和 PHP 的preg_replace函数(尽管我对其他方法持开放态度,因为我不能随便想想)。

因此,从上面的字符串中,以下内容将匹配(我将它们放在带有斜体的括号中以帮助您区分):

OPEN有人打招呼CLOSE打招呼你好 )人们OPEN有人打招呼OPEN他们又打招呼

不知道该怎么做。

编辑也许这会更好地阐明嵌套结构:

正如你从上面看到的,你好没有被注意到,因为它在 OPEN...CLOSE 中(所以它们被忽略了),而其他的则不会被替换。

0 投票
1 回答
234 浏览

php - php preg_replace_call :提取特定值以供以后重新插入

为简洁起见...
我想从字符串中取出项目,将它们放入单独的数组中,用 ID 标记替换从字符串中提取的值,解析字符串,然后将提取的项目放回它们的原始位置(按正确顺序)。(如果这是有道理的,那么跳过其余的:D)

我有以下字符串;
“我的句子包含指向 [url] 和 [url] 的 URL,这让我的生活变得困难。”

由于各种原因,我想删除这些 URL。但我需要保留它们的位置,稍后再重新插入它们(在处理完字符串的其余部分之后)。

因此我愿意;
“我的句子包含指向 [url] 和 [url] 的 URL,这让我的生活变得困难。”
成为;
“我的句子包含指向 [token1fortheURL] 和 [token2fortheURL] 的 URL,这让我的生活变得困难。”

我已经尝试过几次,各种方式。我所做的就是撞砖墙并发明新的脏话!

我使用以下代码进行设置;

然后我做一个 preg_replace_callback;

我的功能如下;

正是在这里,砖墙开始发生。我可以将东西放入空白提取数组中 - 但它们在函数之外不可用。我可以使用令牌更新字符串,但我无法访问被替换的 URL。我似乎无法向 preg_replace_callback 中的函数调用添加其他值。

我希望有人可以提供帮助,因为这让我发疯。


更新:

根据@Lepidosteus 建议的解决方案,我认为我有以下工作?

这似乎有效?

0 投票
2 回答
1714 浏览

php - 带有多个参数的 PHP preg_replace_callback

我想做一个正则表达式替换,但我不想每次找到它时都这样做。我认为 preg_replace_callback 是我需要使用的,只是在那里进行随机检查,但我不知道如何向回调函数传递多个参数。我最终需要两个以上,但如果我能得到两个工作,我可能会得到更多的工作。

例如,我想在 50% 的时间里进行替换,而其他时候我只是返回找到的内容。这是我一直在使用的几个函数,但它们不能正确。

谢谢艾伦

0 投票
1 回答
211 浏览

php-5.3 - 500 error preg_replace_callback when using function ($match) use ($video){}

Works on my localhost running php 5.3.4

Does not work on my VPS hostgator account running 5.3.6

The problem here seems to be the "use" keyword

Code Below

#xA;

Many thanks for you help.

0 投票
1 回答
235 浏览

java - Java 的 Matcher 类是否有 PHP 端口?

我正在将 YUI 的CssCompressor移植到 PHP ,它有多个Matcher用途。为了长期维护,我希望 PHP 端口尽可能与 Java 原始端口相似(preg_replace_callback当然可以,但会极大地改变程序流程)。

那么,有没有人将 Matcher 移植到 PHP 中?

0 投票
1 回答
689 浏览

php - preg_replace & preg_replace_callback 安全问题

好的,我知道这是一种不好的做法,但是部分代码已经存在,我必须扩展它以运行带有一个参数的自定义函数。

因此,我们的页面存储在 db 中,当它们显示在我们的模板中时,我们当前在整个 html 页面上使用三个不同的带有 e 修饰符的 preg_replace 函数。

这似乎很慢,所以我想将其更改为仅使用一个 preg_replace 调用,并能够以 bbcode 方式提供带有 1 个参数的自定义函数:示例:

[FUNC:testfunc(测试字符串)]

所以,这就是我想出的......我不确定哪种方法更安全,preg_rplace 与 e 修改器,或 preg_replace_callback:

我喜欢使用 e 修饰符的一点是,如果需要,我可以在 php 中直接在函数调用中添加另一个参数,如下所示:

一种方法比另一种更安全吗?它们都是巨大的安全风险吗?我必须对这些进行一些实施..

编辑:我发现您可以使用匿名函数传递回调函数的附加参数,例如:

这会将 callback_caller() 函数传递给我的整个文章类以供使用。为每场比赛创建一个这样的匿名函数是否不好,性能方面?

0 投票
3 回答
611 浏览

php - php - 使用 preg_replace_callback 和 ord() 清理用户输入?

我有一个论坛风格的文本框,我想清理用户输入以阻止潜在的 xss 和代码插入。我见过使用 htmlentities,但后来其他人说 &,#,%,: 字符也需要编码,而且我看起来越多,出现的潜在危险字符就越多。白名单是有问题的,因为除了 ^a-zA-z0-9 之外还有许多有效的文本选项。我想出了这个代码。它能阻止攻击并确保安全吗?有什么理由不使用它,还是有更好的方法?

编辑:_ __ _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ____ 我当然可能是错的,但我的理解是 htmlentities 仅替换 & < > " (如果 ENT_QUOTES 已打开,则为 ' )。这可能足以阻止大多数攻击(坦率地说,对于我的低流量站点来说可能绰绰有余)。然而,在我对细节的痴迷关注中,我进一步挖掘。我警告过一本书还要编码 # 和 % 以“关闭十六进制攻击”。我发现有两个网站警告不要允许:和 --。这一切都相当混乱对我来说,并引导我探索转换所有非字母数字字符。如果 htmlentities 已经这样做了,那就太好了,但似乎没有。这是我在 Firefox 中单击查看源代码后复制的代码的结果。

原始(要测试的随机字符): 5: gjla#''*&$!jl:4

preg_replace_callback: <b>5:</b>gjla<hi>#''*&$!jl:4

htmlentities(带 ENT_QUOTES):<b>5:</b>gjla<hi>#''*&$!jl:4

htmlentities 似乎没有对其他字符进行编码,例如:对不起文字墙。这只是我偏执吗?

编辑#2:_ __ _ __ _ __ _ _

0 投票
2 回答
3409 浏览

php - 将 preg_replace_callback 与外部类一起使用

我有一个问题问你!

通常,如果您在 OOP 上下文中调用回调函数,则必须使用array(&$this, 'callback_function')

这就是我想出来的。

但是现在我想在外部类中调用回调,因为有很多回调函数。出于结构原因,我想给他们一个自己的课程。

我想:“好吧,创建一个此类的实例并传递它而不是 $this。”

所以我尝试了它,array($cb, 'callback_function')array($this->cb, 'callback_function')它不会工作。

我究竟做错了什么?

谢谢你的帮助!


编辑:

在我的基础课上,我有:

并调用它:

在我的回调类中,我有:

0 投票
3 回答
507 浏览

php - 使用 preg_replace_callback() 回调访问 PHP 中的全局状态

我有一段文字,例如:

XYZ id dui vel erat bibendum hendrerit aliquet ac lorem。整数ABC turpis, facilisis sat amet ultricies non, tempor LMNOP est. Aliquam sat amet sapien justo。Quisque TUV dolor dolor,欧盟 sodales mi。

我需要用带编号的占位符替换粗体字。

%%%1%%% id dui vel erat bibendum hendrerit aliquet ac lorem。整数 %%%2%%% turpis, facilisis sit amet ultricies non, tempor %%%3%%% est. Aliquam sit amet sapien justo. Quisque %%%4%%% dolor dolor, eu sodales mi。

进行此替换时,我需要将要替换的文本(例如 XYZ)存储到一个数组中,并键入占位符的编号(例如 1),以便稍后我可以返回并将它们换回原始值。

困难的部分是我事先不知道替换文本,所以我需要一个回调来根据当前已经替换的项目数生成它。

我在旧版本的 PHP 上运行,并且我的工具包中没有可用的匿名函数,所以我相信我仅限于使用preg_replace_callback. 看来我的问题归结为这样一个事实,即我需要创建(使用create_function)的函数才能访问一些共享的全局状态——至少是一个共享的全局数组,我可以在其中推送和弹出被替换的文本到堆。

这可能吗?

0 投票
2 回答
191 浏览

php - 如何使用 preg_replace(_callback) 依次替换带标签的文本

目标文本类似于:

Lorem ipsum dolor #sit# amet, consectetur #adipisicing# elit, sed do #eiusmod# tempor incididunt ut labore et dolore magna aliqua。Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip。

与#sit#、#adipisicing#、#eiusmod# 标签对应的数据将是数组,如:

我想使用 preg_replace 或 preg_replace_callback 依次替换由数组值标记的哈希标签。得到结果:

怎么可能做到这一点?