我试图仅用文本替换链接并重新保存内容,但前提是满足以下要求。但是,当我使用preg_replace
函数时,即使我能够使用NULL
用文本替换链接,它也会返回array_replace($fullLinks,$linksRemoved)
。
我删除了array_replace
,因为我不知道如何将新数组放回内容中。
我已经遍历了所有其他“ preg_replace
返回NULL”的帖子,但是找不到适合我的解决方案。在搜索模式时,我认为“你好,我是标题”也是一个模式,还是我要去哪里错了?
$post_id = 122232;
$content_post = get_post($post_id);
$content = $content_post->post_content;
$linksRemoved[] = array();
$FullLinks[] = array();
// preg_match_all('/<a.*href=\"(.*)\".*><\/a>/isU', $content, $matches);
// above only returns 11 links
$regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>(.*)<\/a>";
if(preg_match_all("/$regexp/siU", $content, $matches)) {
$avoidImages = array('.jpg', '.png', '.gif', '.jpeg', 'glossary');
foreach ($matches[0] as $match){
if($match == str_replace($avoidImages, '', $match)){
if (strpos($match, 'bush.com') == true || strpos(match, 'articles') == true){
$fullLinks[] = array('match' => $match );
$linksRemoved[] = array('links' => strip_tags($match) );
}
}
}
}
$linksRemoved = array_filter($linksRemoved);
$content = preg_replace($fullLinks, $linksRemoved, $content);
echo '<pre>';
var_dump($content);
echo '</pre>';
我已经尝试使用DOMDocument,但是一直卡在replaceChild甚至跳过了以下元素的地方:PHP DOMDocument skips even elements
下面的 $linksRemoved
数组示例:
$fullLinks
数组是相同的,但是单词是超链接的,因此它包含标记。
[0]=>
array(1) {
["match"]=>
string(114) "gluteus medius"
}
[1]=>
array(1) {
["match"]=>
string(174) "gluteal complex"
}
[2]=>
array(1) {
["match"]=>
string(130) "rectus abdominis"
}
答案 0 :(得分:1)
AFAIK preg_replace不适用于多级数组,请更改这两行
$fullLinks[] = array('match' => $match );
$linksRemoved[] = array('links' => strip_tags($match) );
进入
$fullLinks[] = $match;
$linksRemoved[] = strip_tags($match);