【问题标题】:PHP: Edit link in contentPHP:编辑内容中的链接
【发布时间】:2017-01-21 14:31:29
【问题描述】:

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

   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;
}

问题是:

Warning: preg_replace(): Unknown modifier 'd' in functions.php on line 112

【问题讨论】:

  • 欢迎来到 SO!如果你需要帮助,你需要更清楚一点。什么文本被传递到您的过滤器?返回什么文本?您希望返回的文本如何不同(或者,如果它是“正确的”会是什么?具体。细节很重要!
  • @cale_b 我​​编辑我的帖子
  • $text的内容是什么? 112 是哪一行?
  • 你不够具体。您传递给函数的文本是什么?你想添加什么?在哪里?你代码的哪一行是 112?

标签: php wordpress preg-replace preg-match-all


【解决方案1】:

我猜你的字符串中有用作分隔符的字符(即%)。

你可以用preg_quote来逃避它:

// 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);
}

【讨论】:

  • 这是我的猜测。由于匹配可以包含任意数量的字符,包括“特殊”正则表达式字符。不知道 preg_quote,很好的解决方案!
  • 如何排除某些域?
  • @wpPicture:最简单的方法是在循环开始时测试数组$matches[0][$a]
  • 谢谢,但我添加了类似 (kam.com) 的域但不起作用,您的意思是添加类似 (kam.com) 吗?
  • @Toto 记住 ,,, 我的域有一些时间字符串变量,例如 kam.com/media/kamdd.jpg 一些时间,例如 kam.com/sound/dddd.mp3
【解决方案2】:

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

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;
}

【讨论】:

  • OP 使用% 作为分隔符,您的建议没有回答问题。
  • 请测试 url 3v4l.org/%ef">text</a> 到分隔符 %
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 2014-06-11
  • 1970-01-01
相关资源
最近更新 更多