venuko
28-01-2009, 19:18
$words=array('World','пять и два','государств','Семь');
$open_tags=array('<a href="ssilka1">','<a href="ssilka2">','<a href="ssilka3">','<a href="ssilka4">');
$close_tags=array('</a>','</a>','</a>','</a>');
function highlight_first($text, $words, $open_tags, $close_tags) {
$arReplace = array();
for($i=0; $i<count($words); $i++) {
//$words[$i] = '/('.preg_quote($words[$i]).')/iu';
$words[$i] = "/\b(".preg_quote($words[$i]).")\b/";
//$words[$i] = "/(?<![a-z0-9а-я])(".preg_quote($words[$i]).")(?![a-z0-9а-я])/iu";
$arReplace[]= $open_tags[$i]. '\1'. $close_tags[$i];
}
$text = preg_replace($words, $arReplace, $text, 1);
return $text;
}
$text = "Семь и ещё world World семь Буквы world разные и т.д. пять и два потом World Пять и два государственный. Семь государств и Шесть паШесть";
$text=highlight_first($text,$words,$open_tags,$close_tags);
echo $text;
Результат работы скрипты такой: <a href="ssilka4">Семь</a> и ещё world <a href="ssilka1">World</a> семь Буквы world разные и т.д. <a href="ssilka2">пять и два</a> потом World Пять и два государственный. Семь <a href="ssilka3">государств</a> и Шесть паШесть
А должен быть: Результат работы скрипты такой: <a href="ssilka4">Семь</a> и ещё <a href="ssilka1">world</a> World семь Буквы world разные и т.д. <a href="ssilka2">пять и два</a> потом World Пять и два государственный. Семь <a href="ssilka3">государств</a> и Шесть паШесть
Т.е. скрипт в тексте оборчивает нужными тегами самые первые вхождения слов (повторения не оборачивает), слова для оборачивания в массиве, также теги. Проблема в том что что-то с регистром, т.е. слово World обернулось, а должно было world с маленькой буквы, так как оно первое вхождение. Подскажите в чем проблема, плиз?
$open_tags=array('<a href="ssilka1">','<a href="ssilka2">','<a href="ssilka3">','<a href="ssilka4">');
$close_tags=array('</a>','</a>','</a>','</a>');
function highlight_first($text, $words, $open_tags, $close_tags) {
$arReplace = array();
for($i=0; $i<count($words); $i++) {
//$words[$i] = '/('.preg_quote($words[$i]).')/iu';
$words[$i] = "/\b(".preg_quote($words[$i]).")\b/";
//$words[$i] = "/(?<![a-z0-9а-я])(".preg_quote($words[$i]).")(?![a-z0-9а-я])/iu";
$arReplace[]= $open_tags[$i]. '\1'. $close_tags[$i];
}
$text = preg_replace($words, $arReplace, $text, 1);
return $text;
}
$text = "Семь и ещё world World семь Буквы world разные и т.д. пять и два потом World Пять и два государственный. Семь государств и Шесть паШесть";
$text=highlight_first($text,$words,$open_tags,$close_tags);
echo $text;
Результат работы скрипты такой: <a href="ssilka4">Семь</a> и ещё world <a href="ssilka1">World</a> семь Буквы world разные и т.д. <a href="ssilka2">пять и два</a> потом World Пять и два государственный. Семь <a href="ssilka3">государств</a> и Шесть паШесть
А должен быть: Результат работы скрипты такой: <a href="ssilka4">Семь</a> и ещё <a href="ssilka1">world</a> World семь Буквы world разные и т.д. <a href="ssilka2">пять и два</a> потом World Пять и два государственный. Семь <a href="ssilka3">государств</a> и Шесть паШесть
Т.е. скрипт в тексте оборчивает нужными тегами самые первые вхождения слов (повторения не оборачивает), слова для оборачивания в массиве, также теги. Проблема в том что что-то с регистром, т.е. слово World обернулось, а должно было world с маленькой буквы, так как оно первое вхождение. Подскажите в чем проблема, плиз?