|
|
|
| Подскажите, как исправить обыкновенную подсветку ключевых слов заголовка:
$podsvetka = str_replace(" ", "|", $myrow["zagolovok"]); // Делаем подсветку похожих слов
$zagolovok_podsvetka = ereg_replace($podsvetka, "<font class='podsvetka'>\\0</font>", $myrow3["zagolovok"]);
|
$myrow["zagolovok"] - ключевой заголовок
$myrow3["zagolovok"] - подсвечиваемые заголовки
Вроде нормально работает, но порой выдает ошибки функции ereg_replace и хотелось бы убрать регистрозависимость заголовков. Заранее благодарен.
И вообще хотелось бы заменить её на другую, слышал что она уже устарела. | |
|
|
|
|
|
|
|
|
для: confirm
(04.04.2013 в 16:54)
| | Пробовал так:
// Искомая строка для подсветки на странице
$search = $myrow["zagolovok"];
// Создаем строку для регулярного выражения
$pattern = "/((?:^|>)[^<]*)(".$search.")/si";
// Подсвеченная строка
$replace = '$1<b style="color:#FF0000; background:#FFFF00;">$2</b>';
// Заменяем
$zagolovok_podsvetka = preg_replace($pattern, $replace, $myrow3["zagolovok"]);
|
либо выдает ошибку, либо ничего не выделяет. Не пойму почему. | |
|
|
|
|
|
|
|
для: segazav
(04.04.2013 в 17:28)
| | Покажите лучше пример строки в которой вы хотите подсветить и что (чем заменяете). | |
|
|
|
|
|
|
|
для: confirm
(04.04.2013 в 17:34)
| | $myrow["zagolovok"] - основной заголовок с полным текстом сообщения из базы данных, а ниже выводятся похожие заголовки сообщений $myrow3["zagolovok"].
Все это выводится на страницу в цикле оператором printf()
Хотелось бы подсветить точные совпадения слов в заголовках похожих сообщений $myrow3["zagolovok"] с основным заголовком на странице $myrow["zagolovok"].
Вот так все работает, но выдает иногда ошибки и зависит от регистра букв, да ещё и устаревшая функция ereg_replace().
$podsvetka = str_replace(" ", "|", $myrow["zagolovok"]); // Делаем подсветку похожих слов
$zagolovok_podsvetka = ereg_replace($podsvetka, "<font class='podsvetka'>\\0</font>", $myrow3["zagolovok"]);
|
| |
|
|
|
|
|
|
|
для: segazav
(04.04.2013 в 17:47)
| | Я вас о чем просил - показать пример самой строки (одной) в которой нужно подсветить, и ту строку по которой определяется что подсветить (если я правильно понял). А вы мне что показываете? Вы думает я догадываюсь, что содержат ваши $myrow["zagolovok"] и $myrow3["zagolovok"]? | |
|
|
|
|
|
|
|
для: confirm
(04.04.2013 в 17:51)
| | страница с текстом:
"Поздравления в стихах любимого мужчины" - $myrow["zagolovok"]
в низу страницы похожие сообщения:
"Поздравления в стихах любимой девушки" - $myrow3["zagolovok"]
"Поздравления по СМС мужчины" - $myrow3["zagolovok"]
"Стихи для любимых" - $myrow3["zagolovok"]
P.S. Кавычки не выводятся, только для примера
P.S. Вообщем нужно, чтобы подсвечивалось каждое слово заголовков отдельно, а не вся строка
Ошибок вроде удалось избежать, но ничего не подсвечивается:
// Искомая строка для подсветки на странице
$search = preg_quote($myrow["zagolovok"], "/");
// Создаем строку для регулярного выражения
$pattern = "/((?:^|>)[^<]*)(".$search.")/si";
// Подсвеченная строка
$replace = '$1<b style="color:#FF0000; background:#FFFF00;">$2</b>';
// Заменяем
$zagolovok_podsvetka = preg_replace($pattern, $replace, preg_quote($myrow3["zagolovok"], "/"));
|
| |
|
|
|
|
|
|
|
для: segazav
(04.04.2013 в 17:58)
| |
<?
$s = "Поздравления в стихах любимого мужчины";
$search = "стихах";
echo htmlspecialchars(str_replace($search, '<b>'.$search.'</b>', $s));
| Вот тут мне надо было обрамить слово "стихах", что и сделано, а вы чего пытаетесь? | |
|
|
|
|
|
|
|
для: confirm
(04.04.2013 в 18:16)
| | Нужно, чтобы каждое слово "Поздравления в стихах любимого мужчины" сравнивалось с каждым словом других заголовков и подсвечивались совпадения. | |
|
|
|
|
|
|
|
для: segazav
(04.04.2013 в 19:13)
| | Это тоже не проблема, учитывая, что вы разбиваете на составляющие, и в этом случае лучше уж так:
<?
$s = "Поздравления в стихах любимого мужчины";
$search = explode(" ", "стихах мужчины");
$replace = explode('|', '<b>'.implode('</b>|<b>', $search).'</b>');
echo htmlspecialchars(str_ireplace($search, $replace, $s));
| Правда это для кодировки 1251. У вас шаблон не соответствует, поэтому и... | |
|
|
|
|
|
|
|
для: confirm
(04.04.2013 в 20:44)
| |
$s = "Поздравления в стихах любимого мужчины";
$search = explode(" ", "стихах мужчины");
$replace = explode('|', '<b>'.implode('</b>|<b>', $search).'</b>');
echo htmlspecialchars(str_ireplace($search, $replace, $s));
|
Выводит
Поздравления в <b>стихах</b> любимого <b>мужчины</b> | |
|
|
|
|
|
|
|
для: segazav
(04.04.2013 в 23:48)
| | Ну правильно, это и должно вывести, это ведь пример, и чтобы отобразить строку результирующую и, что замена произошла корректно, html-код замены заменяется на html-сущности. Уберите из примера функцию htmlspecialchars(), будет отображено жирным шрифтом. | |
|
|
|
|
|
|
|
для: confirm
(04.04.2013 в 23:57)
| | Ага, понял спасибо!
А как сделать вышеуказанный код не регистрозависимым? | |
|
|
|
|
|
|
|
для: segazav
(05.04.2013 в 00:01)
| | Зачем? Вы прочтите о функции str_replace, ее аргументах, каких типов могут быть ее аргументы, и как производится замена. Ответьте на свой вопрос - нужно ли разбивать на массив, гонять их циклом, если строка поиска и так разбивается на массив?
Вообще, изучайте код примеров, которые вам дают, читая о функциях из примеров. Надо же как-то учится понимать код, и без знания работы функций, на одних подсказках на "как такое сделать?" вы далеко не уедете.
Что вы там хотите подсветить и что значит поиск в вашем случае.... В предложениях:
Рыбалка на природе, это полезно
и
Рыбалка, охота - снаряжения для активного отдыха
поиск и подсветка слов по искомому "рыбалка на природе", как этого вы хотите, подсветит слово "Рыбалка" в обеих предложениях, хотя второе предложение имеет совсем иной смысл. Поэтому еще вопрос, чего вы там пытаетесь подсветить, тем более, что конкретных строк вы так и не показали.
Так что думайте, размышляйте сами, а этот пример основан только на моих "предположениях". | |
|
|
|
|
|
|
|
для: confirm
(05.04.2013 в 00:17)
| | Поверьте, иногда просто не хватает времени на плотное изучение PHP, да и забываешь все со временем.
Мне нужна была подсветка точных совпадений слов и с Вашей помощью это получилось, спасибо Вам большое!!!
Но я не понял одного, вроде str_ireplace() не чувствительна к регистру, но если так:
<?php
$s = "Поздравления в стихах любимого мужчины";
$search = explode(" ", "Cтихах мужчины");
$replace = explode('|', '<b style="background:#FFFF00;">'.implode('</b>|<b style="background:#FFFF00;">', $search).'</b>');
echo str_ireplace($search, $replace, $s);
?>
|
то "...стихах..." уже не выделяет.
Можно ли как то это исправить? | |
|
|
|
|
|
|
|
для: segazav
(05.04.2013 в 00:42)
| | Ещё хотелось бы как то исключить из подсветки слова меньше 2-х символов, но не могу сообразить, как правильно применить strlen() в данном примере... а то все предлоги тоже подсвечивает(( | |
|
|
|
|
|
|
|
для: segazav
(05.04.2013 в 00:42)
| | Ну да, взял и поверил. Как говорил лейтенант Коломбо, я не могу понять странности, которые меня всегда беспокоят. Время на форум для вопросов у вас есть, время экспериментировать с кодом, не понимая функций и тратя соответственно на это массу времени у вас есть, а времени зайти на официальный сайт РНР и изучить функции у вас нет. Странно.
Строки и массивы, это типы данных с которыми вам придется сталкиваться постоянно, и не знать функций для работы с этими данными, задавая вопросы по пустячным проблемам, это не похоже на нехватку времени, это нечто другое - это лень. )
Все правильно, так и должно быть, потому как функция str_ireplace (и не только эта из функций обработки строк) зависит от локали. Чтобы она работала корректно не только для английского, но и кириллицы, необходимо установить локаль.
<?
setlocale(LC_ALL, 'Russian_Russia.1251');
|
А чтобы не подсвечивало короткие слова, нужно удалить из массива поиска элементы, длина которых меньше заданной.
Но str_ireplace() не занимается подсветкой, она производит замену, и как сказать, правильным ли будет, если результат поиска изменяет текст оригинала:
Поздравления в Стихах любимого мужчины
Правильно ли удалять "короткие" слова из результата, если это действительно поиск и он производится по логике "И". | |
|
|
|
|
|
|
|
для: confirm
(05.04.2013 в 11:08)
| | Но ведь можно убрать короткие слова не из результатов поиска, а из ключевой строки, все равно поиск ведется только по словам, а не по целой строке. | |
|
|
|
|
|
|
|
для: segazav
(05.04.2013 в 15:35)
| | Я не знаю, что такое ключевая строка. Я вообще не понимаю, что на что вы меняете, так как не раз просил это объяснить, показать строки, но результата...
Если вы понимаете что нужно сделать, и то что я написал, это именно то что и нужно, меняйте, удаляйте, я ведь против ничего не имею. Я все пишу основываясь только на своих предположениях. | |
|
|
|
|
|
|
|
для: confirm
(05.04.2013 в 16:07)
| | Я не понимаю, как удалить короткие символы из строки: $s = "Поздравления в стихах любимого мужчины"; - она и является ключевой и выводится обрезанной не будет, просто по ней идет сравнение с другими строками. | |
|
|
|
|
|
|
|
для: segazav
(05.04.2013 в 17:37)
| | >"Строки и массивы, это типы данных с которыми вам придется сталкиваться постоянно, и не знать функций для работы с этими данными..."
Коли вы задаете здесь вопросы, то уж точно некоторым временем вы обладаете. Заходим сюда (и желательно почаще сюда заходить), и ищем ответ на вопрос - "как узнать длину строки?"
Это будет первым шагом к решению вашей задачи - Я не понимаю, как удалить короткие символы из строки
Вот только я сомневаюсь, что удалять их надо из строки в которой производится поиск. Но хотение пуще неволи, хотите, ну значит пусть будет так.
Итак - найдите сперва ответ на первый вопрос в руководстве РНР, затем далее.
PS. Коротких символов в природе не существует, они все короткие ) | |
|
|
|