Замена слов в php на preg_replace в заданной области div - PullRequest
2 голосов
/ 17 сентября 2010

Хочу заменить несколько слов на лету на моем сайте.

$content = preg_replace('/\bWord\b/i', 'Replacement', $content);

Это работает до сих пор.Но теперь я хочу только изменить слова, которые находятся внутри div id = "content"

Как мне это сделать?

Ответы [ 3 ]

1 голос
/ 17 сентября 2010
$dom = new DOMDocument();
$dom->loadHTML($html);

$x = new DOMXPath($dom);
$pattern = '/foo/';
foreach($x->query("//div[@id='content']//text()") as $text){
   preg_match_all($pattern,$text->wholeText,$occurances,PREG_OFFSET_CAPTURE);
   $occurances = array_reverse($occurances[0]);
   foreach($occurances as $occ){
       $text->replaceData($occ[1],strlen($occ[0]),'oof');
   }
   //alternative if you want to do it in one go:
   //$text->parentNode->replaceChild(new DOMText(preg_replace($pattern,'oof',$text->wholeText)),$text);
}
echo $dom->saveHTML();
//replaces all occurances of 'foo' with 'oof'
//if you don't really need a regex to match a word, you can limit the text-nodes 
//searched by altering the xpath to "//div[@id='content']//text()[contains(.,'searchword')]"
1 голос
/ 18 сентября 2010

используйте the_content фильтр, вы можете поместить его в свои темы function.php файл

add_filter('the_content', 'your_custom_filter');
function your_custom_filter($content) {
  $pattern = '/\bWord\b/i'
  $content = preg_replace($pattern,'Replacement', $content);
  return $content;
}

ОБНОВЛЕНИЕ: Это применимо, только если вы, конечно, используете WordPress.

1 голос
/ 17 сентября 2010

Если содержимое управляется динамически, просто введите возвращаемое значение $content в div с идентификатором содержимого.Если содержимое статическое, то вам придется либо использовать этот фрагмент PHP-кода в тексте, затем вывести возврат в div, либо использовать JavaScript (грязный метод!).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...