php 如何在进行 base64encode 的同时进行 preg_replace
php how to do base64encode while doing preg_replace
我正在使用 preg_replace
查找 BBCODE
并将其替换为 HTML 代码,
但是在这样做的同时,我需要 base64encode
url,我该怎么做?
我正在使用 preg_replace
这样的:
<?php
$bbcode = array('#\[url=(.+)](.+)\[/url\]#Usi');
$html = array('<a href=""></a>');
$text = preg_replace($bbcode, $html,$text);
如何 base64encode
href
值,即 </code>?</p>
<p>我试过:</p>
<pre><code>$html = array('<a href="/url/'.base64_encode('{}').'/"></a>');
但它的编码是 {}
而不是实际的 link。
我猜你不能用 preg_replace
来做到这一点,相反,你必须使用 preg_match_all
并在结果中循环:
$bbcode = array('#\[url=(.+)](.+)\[/url\]#Usi');
$html = array('<a href=""></a>');
$out = array();
$text = preg_matc_all($text, $bbcode, $out, PREG_SET_ORDER);
for ($i = 0; $i < count($out); $i++) {
// $out[$i][0] should be the html matched fragment
// $out[$i][1] should be your url
// $out[$i][2] should be the anchor text
// fills the $html replace var
$replace = str_replace(
array('',''),
array(base64_encode($out[$i][1]), $out[$i][2]),
$html);
// replace the full string in your input text
$text = str_replace($out[$i][0], $replace, $text);
}
您可以使用 preg_replace_callback()
函数代替 preg_replace
:
<?php
$text = array('[url=www.example.com]test[/url]');
$regex = '#\[url=(.+)](.+)\[/url\]#Usi';
$result = preg_replace_callback($regex, function($matches) {
return '<a href="/url/'.base64_encode($matches[1]).'">'.$matches[2].'</a>';
}, $text);
它接受一个函数作为第二个参数。该函数从您的正则表达式中传递一组匹配项,预计 return 返回整个替换字符串。
我正在使用 preg_replace
查找 BBCODE
并将其替换为 HTML 代码,
但是在这样做的同时,我需要 base64encode
url,我该怎么做?
我正在使用 preg_replace
这样的:
<?php
$bbcode = array('#\[url=(.+)](.+)\[/url\]#Usi');
$html = array('<a href=""></a>');
$text = preg_replace($bbcode, $html,$text);
如何 base64encode
href
值,即 </code>?</p>
<p>我试过:</p>
<pre><code>$html = array('<a href="/url/'.base64_encode('{}').'/"></a>');
但它的编码是 {}
而不是实际的 link。
我猜你不能用 preg_replace
来做到这一点,相反,你必须使用 preg_match_all
并在结果中循环:
$bbcode = array('#\[url=(.+)](.+)\[/url\]#Usi');
$html = array('<a href=""></a>');
$out = array();
$text = preg_matc_all($text, $bbcode, $out, PREG_SET_ORDER);
for ($i = 0; $i < count($out); $i++) {
// $out[$i][0] should be the html matched fragment
// $out[$i][1] should be your url
// $out[$i][2] should be the anchor text
// fills the $html replace var
$replace = str_replace(
array('',''),
array(base64_encode($out[$i][1]), $out[$i][2]),
$html);
// replace the full string in your input text
$text = str_replace($out[$i][0], $replace, $text);
}
您可以使用 preg_replace_callback()
函数代替 preg_replace
:
<?php
$text = array('[url=www.example.com]test[/url]');
$regex = '#\[url=(.+)](.+)\[/url\]#Usi';
$result = preg_replace_callback($regex, function($matches) {
return '<a href="/url/'.base64_encode($matches[1]).'">'.$matches[2].'</a>';
}, $text);
它接受一个函数作为第二个参数。该函数从您的正则表达式中传递一组匹配项,预计 return 返回整个替换字符串。