使用 preg_replace 和 FOR 循环替换 PHP 关键字

标签 php wordpress loops preg-replace

我完全不知道这里出了什么问题。任何帮助将不胜感激。

我正在为 wordpress 网站制作关键字替换工具。我的问题是我的 preg_replace 似乎只在浏览帖子内容时在数组中的最后一个元素上运行。

下面的两个 get_options 只是 textarea 字段,每个关键字和替换在单独的一行上使用字符返回。

function keyword_replace($where) { 
  $keywords_to_replace = get_option('keywords_to_replace');
  $keyword_links = get_option('keyword_links');
  $KWs = explode("\n", $keywords_to_replace);
  $URLs = explode("\n", $keyword_links);

  $pattern = array(); 
  $replacement = array(); 
  for($i=0; $i< count($KWs); $i++) { 
    $pattern2 = '/<a[^>]*>(.*?)'.$KWs[$i].'(.*?)</a>/'; 
    if(preg_match($pattern2, $where))  {
      continue;
    } else {
      $pattern[$i] = '\'(?!((<.*?)|(<a.*?)))(\b'. $KWs[$i] . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'si'; 
      $replacement[$i] .= '<a href="'.$URLs[$i].'" target="_blank">'.$KWs[$i].'</a>';
    }
  }
  return preg_replace($pattern, $replacement, $where, -1); 
} 
add_filter('the_content','keyword_replace');

var_dump() 返回所有正确的信息,转储中似乎没有任何内容被跳过。我一直在试图弄清楚为什么它不遍历整个数组。

感谢您的帮助, 拉斐尔

最佳答案

我有一个 friend 帮我解决了这个问题。以防万一其他人遇到与我类似的问题,解决方法是在 $pattern[$i] 中围绕 $KWs[$i] 使用 trim() 命令。

$pattern[$i] = '\'(?!((<.*?)|(<a.*?)))(\b'. trim($KWs[$i]) . '\b)(?!(([^<>]*?)>)|([^>]*?</a>))\'si';

这一切都归结为 Windows 与 Mac 在字符返回上的对比。

关于使用 preg_replace 和 FOR 循环替换 PHP 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33657051/

相关文章:

php - 布局 CSS 在 Safari 中完美运行但在 Firefox 中运行不佳?

WordPress URL 路由问题

php - Laravel php foreach循环按键获取值

wordpress - xml 解析错误 xml 或文本声明不在 wordpress 提要中的实体开头

php - woocommerce 上的 Wordpress 照片大小问题

loops - 在 Mathematica : multiple outputs 中循环

javascript - 在循环中使用 JS 和 CSS 更改对象的旋转

测试可被 7 整除/倍数的 C++ 程序

javascript - 我应该使用 php 还是 javascript

php - 在简单网站上缓存字体以防止 FOIT?