PHP:编辑内容中的链接

PHP:编辑内容中的链接,php,wordpress,preg-replace,preg-match-all,Php,Wordpress,Preg Replace,Preg Match All,我正在尝试向内容中任何链接的末尾添加字符串,我正在尝试以下代码: add_filter('the_content', 'crawl_content'); function crawl_content( $text ) { $search = '/href="(.*?)"/s'; preg_match_all( $search, $text, $matches); for ($a = 0; $a < count($matches[0]); $a++) {

我正在尝试向内容中任何链接的末尾添加字符串,我正在尝试以下代码:

   add_filter('the_content', 'crawl_content');
function crawl_content( $text ) {
    $search = '/href="(.*?)"/s';
    preg_match_all( $search, $text, $matches);
    for ($a = 0; $a < count($matches[0]); $a++)    {
        $new = "href=\"" . $matches[1][$a] . "/?=dddd\" class=\"newsLink\"";
        $text = preg_replace('%' . $matches[0][$a] . '%', $new, $text);
    }
    return $text;
}

在PHP中,正则表达式需要包含在一对表达式中。分隔符可以是任何非字母数字、非反斜杠、非空白字符;/、#、~是最常用的

function crawl_content($text)
{
    $search = '/href="(.*?)"/s';
    preg_match_all($search, $text, $matches);
    for ($a = 0; $a < count($matches[0]); $a++) {
        $new  = sprintf('href="%s/?=dddd" class="newsLink"',$matches[1][$a]);
        $text = preg_replace('~' . $matches[0][$a] . '~', $new, $text);
    }
    return $text;
}
函数爬网\u内容($text)
{
$search='/href=“(.*)”/s';
preg_match_all($search、$text、$matches);
对于($a=0;$a
我猜字符串中存在用作分隔符的字符(即
%

你可以通过以下方式逃避:

//要排除的所有域,用分隔符分隔|
$domains_to_exclude='kam.com | kam2.com';
对于($a=0;$a
欢迎来到SO!如果你需要帮助,你需要更清楚一点。正在将哪些文本传递到您的筛选器?返回的是什么文本?您希望返回的文本如何不同(或者,如果是“正确的”,返回的文本会是什么?具体点。细节很重要!@cale\u b我编辑我的帖子
$text
的内容是什么?哪一行是
112
?你不够具体。你传递给函数的文本是什么?你想添加什么?在哪里?你的代码的哪一行是112?OP使用
%
作为分隔符,你的建议没有答案问题。请测试url 3v4l.org/%ef“>文本到分隔符%这是我的猜测。因为匹配可以包含任意数量的字符,包括“特殊”正则表达式字符。不知道preg_quote,很好的解决方案!如何从中排除某些域?@wpPicture:最简单的方法是测试数组
$matches[0][$a]
在循环开始时。谢谢,但是我添加了类似于(kam.com)的域,但不起作用,你是说添加类似()?@Toto记住,,,我的域有一些时间字符串变量,如
kam.com/media/kamdd.jpg
类似于
kam.com/sound/ddddd.mp3
function crawl_content($text)
{
    $search = '/href="(.*?)"/s';
    preg_match_all($search, $text, $matches);
    for ($a = 0; $a < count($matches[0]); $a++) {
        $new  = sprintf('href="%s/?=dddd" class="newsLink"',$matches[1][$a]);
        $text = preg_replace('~' . $matches[0][$a] . '~', $new, $text);
    }
    return $text;
}
// all domains to exclude, separated by |
$domains_to_exclude = 'kam.com|kam2.com';

for ($a = 0; $a < count($matches[0]); $a++) {
    if (preg_match('~'.$domains_to_exclude.'~i', $matches[1][$a]) ) continue;

    $new = "href=\"" . $matches[1][$a] . "/?=dddd\" class=\"newsLink\"";
    $text = preg_replace('%' . preg_quote($matches[0][$a], '%') . '%', $new, $text);
}