|
|
|
|
|
для: Disel
(20.09.2010 в 16:17)
| | Здесь нет красивых и быстрых решений,
я-бы лишний раз задумался не отказаться-ли совсем от такой подсветки при каждой генерации страницы.
или не изобрести-ли какой-нибудь другой велосипед вместо например такого трактора.
<?php
//header('content-type: text/plain');
function z($m){
global $row;
return (isset($m[1]))? $m[0]
: preg_replace('#'. str_replace(',', '\b|\b', '\b'. trim($row['words']) .'\b') .'#i',
'<a href="'. $row['href'] .'">$0</a>', $m[0]);
}
#Строка текста :
$str ='Манчестер Сити - все о футболе.
<img style="padding:10px;" src="robinjo.jpeg" title="Бразильский нападающий «Манчестер Сити» Робиньо" />
Бразильский нападающий «Манчестер Сити» Робиньо перешел в итальянский «Милан»,
подписав контракт сроком на четыре года, сообщает во вторник AP со ссылкой
на официальный сайт гранда Серии А. В 2008-м он был куплен «Манчестер Сити» за рекордные
для чемпионата Англии деньги.
<br />Англия еще носит название : "<i>Туманный АльБион</i>"';
$a = array(
array('words'=>'англия,туманный альбион', 'href'=>'/1land.html'),
array('words'=>'Бразильск[А-Яа-яЁё]*,Бразилия', 'href'=>'/2land.html'),
array('words'=>'итальянск[А-Яа-яЁё]*,италия', 'href'=>'/3land.html'),
);
$row['words']="англия,туманный альбион";
$row['href']="http://mysite.com/england.html";
do {
$row = current($a);
$str = preg_replace_callback('#(<)a\b[^>]*>.*?</a>\s+|(<)[^>]*>\s+|[^<]+#s', 'z', $str);
} while (next($a) !== false);
echo $str;
|
| |
|
|
|
|
|
|
| Столкнулся с такой проблемой:
Есть некий текст, в котором есть обычные слова, ссылки и картинки. Задача состоит в том, чтобы заменить некоторые слова на ссылки, на при этом еще должны выполнятся условия:
1.Текст ссылки должен оставаться без изменений (с учетом регистра)
2.Замена не должна происходить в уже имеющихся ссылках
3.Замена не должна происходить и title и alt картинок
4.Нужно учесть позицию слова в тексте : начало, конец строки, в кавычках или в тегах.
5.Каждому набору слов соответствует определенная ссылка
6.Замена происходит даже в словах, где ссылка будет частью слова
<?php
#Строка текста :
$str= <<<HTML
Манчестер Сити - все о футболе.<img style="padding:10px;" src="http://football.com/img/robinjo.jpeg" title="Бразильский нападающий «Манчестер Сити» Робиньо" />
Бразильский нападающий «Манчестер Сити» Робиньо перешел в итальянский «Милан», подписав контракт сроком на четыре года, сообщает во вторник AP со ссылкой на официальный сайт гранда Серии А. В 2008-м он был куплен «Манчестер Сити» за рекордные для чемпионата Англии деньги.
<br />Англия еще носит название : "<i>Туманный АльБион</i>"
HTML;
#Слова и ссылки для замены берутся из базы данных (слова записаны через запятую ,им соответствует одна ссылка)
#Например: $row['words']="англия,туманный альбион"; $row['href']="http://mysite.com/england.html";
$li=$db->query(" SELECT * FROM linker "); // выбираем из базы все слова и ссылки
while($row=$db->get_row($li)){
$search=trim(str_replace(',', '|', $row['words'])); // приводим слова к виду: слово1|слово2|слово3...
#Вот моя регулярка:
$str = preg_replace('/(?!<a.*?>\S+)([ \S])('.$search.')([ \S])(?!\S+<\/a>)/si', "\\1<a href=\"".$row['href']."\">\\2</a>\\3", $str );
}
echo $str;
?>
|
В базе, например, есть такие словосочетания :
Манчестер Сити
англи,туманный альбион
На выходе я хотел бы получить следующий текст:
<a href="http://mysite.com/manchester.html">Манчестер Сити</a> - все о футболе.<img style="padding:10px;" src="http://football.com/img/robinjo.jpeg" title="Бразильский нападающий «Манчестер Сити» Робиньо" />
Бразильский нападающий «<a href="http://mysite.com/manchester.html">Манчестер Сити</a>» Робиньо перешел в итальянский «Милан», подписав контракт сроком на четыре года, сообщает во вторник AP со ссылкой на официальный сайт гранда Серии А. В 2008-м он был куплен «<a href="http://mysite.com/manchester.html">Манчестер Сити</a>» за рекордные для чемпионата <a href="http://mysite.com/england.html">Англи</a>и деньги.
<br /><a href="http://mysite.com/england.html">Англи</a>я еще носит название : "<i><a href="http://mysite.com/england.html">Туманный АльБион</a></i>"
|
Но почему то с этой регуляркой работает не совсем так как надо, хотя в ссылках текст на ссылки не меняет... | |
|
|
|
|