|
|
|
| Допустим у меня есть строка:
Я иду шагаю по Москве...
Нужно сделать так, что бы слово "шагаю" находилость в тегах <b></b>, но при этом замены самого слова не происходило...
Подскажите плиз как??? | |
|
|
|
|
|
|
|
для: romza
(23.01.2006 в 17:09)
| | Что значит замены слова не происходило?
<?
$text = "Я иду шагаю по Москве...";
echo str_replace("шагаю","<b>шагаю</b>",$text);
?>
|
Так пойдет? | |
|
|
|
|
|
|
|
для: Евгений Петров
(23.01.2006 в 17:19)
| | Проблема в том что фраза берется из базы, а слова, которые выделяются, задаются пользователем, и не известно, как он напишет... Шагаю или ШАГАЮ или ШаГаЮ. Поэтому нужно что бы замены слова не произоводилось, а слово выводилось так, как оно в базе, только вставлялись теги по краям..... это возможно...??? | |
|
|
|
|
|
|
|
для: romza
(23.01.2006 в 17:25)
| | Не очень понятно. Если проблема только в регистре символов, то можно так:
<?
$text = "Я иду шАгаЮ по Москве...";
echo preg_replace("/(шагаю)/i","<b>\\1</b>",$text);
?>
|
| |
|
|
|
|
|
|
|
для: Евгений Петров
(23.01.2006 в 17:29)
| | Не могли бы вы пояснить, разве в выше приведенном примере не будет просиходить замены самого слова??? И вообще... эта функция не работает... а зарубает все на корню... к сожалению... | |
|
|
|
|
|
|
|
для: romza
(23.01.2006 в 17:38)
| | Хотите, чтобы пользователь мог выделять кусок текста? Почему бы не взять пример с этого форума? | |
|
|
|
|
|
|
|
для: romza
(23.01.2006 в 17:38)
| | Что значит заменяет? Что Вам нужно сделать? | |
|
|
|
|
|
|
|
для: Евгений Петров
(23.01.2006 в 18:00)
| | Есть поиск, в котором должны выделятся слова введенные пользователем... но регистр в котором находятся слова в БД не должен изменятся... должны только добавлятся теги для выделения по краям слова.. | |
|
|
|
|
|
|
|
для: romza
(23.01.2006 в 18:07)
| | А в моем последнем примере он разве менялся? У меня выводит
Я иду шАгаЮ по Москве... | |
|
|
|
|
|
|
|
для: Евгений Петров
(23.01.2006 в 18:09)
| | Тогда вопрос, у меня почему то не работает функция preg_replace, и что значит "\\1"??? и что делать если у меня вместо известного слова есть переменная, могу я туда поставить вместо "шагаю" что нить типа $ttt где находися слово???
А то склонен уже дуамать что придется все переводить в массивы и сранивать их элементы между собой... | |
|
|
|
|
|
|
|
для: romza
(23.01.2006 в 18:10)
| | Вам все правильно дали. Переменную можно поставить. Проверьте версию php все работает. | |
|
|
|
|
|
|
|
для: XPraptor
(23.01.2006 в 18:18)
| | А почему может не работать эта функция вот в такой записи...
$v["e"] = preg_replace("/($exp_asdfa[$i])/i","<b>\\1</b>",$v["e"]);
|
Или где смотреть что нужно включать???? | |
|
|
|
|
|
|
|
для: romza
(23.01.2006 в 18:23)
| |
$v["e"] = preg_replace("/(".$exp_asdfa[$i].")/i","<b>\\1</b>",$v["e"]);
|
| |
|
|
|
|
|
|
|
для: romza
(23.01.2006 в 18:10)
| | могу я туда поставить вместо "шагаю" что нить типа $ttt
Да можете.
А что у вас выводит? Попробуйте вместо \\1 поставить \${1} | |
|
|
|
|
|
|
|
для: Евгений Петров
(23.01.2006 в 18:23)
| | Вообще вывод запарывется, как в первом так и во втором случае (Это я про замену \\1 на \${1), выводит The page cannot be displayed.
ЧТо не так блин товарищи, я тут уже голову сломал... | |
|
|
|
|
|
|
|
для: romza
(23.01.2006 в 18:28)
| | А что у вас за PHP? Ошибка какая то прикольная :) | |
|
|
|
|
|
|
|
для: Евгений Петров
(23.01.2006 в 18:29)
| | У хостеров стоит PHP Version 4.3.11... .... это как??? | |
|
|
|
|
|
|
|
для: romza
(23.01.2006 в 18:31)
| | Да с пхп вроде все в порядке. Версия нужная. А выложите ка в атаче весь код файла, может виднее станет. | |
|
|
|
|
|
|
|
для: romza
(23.01.2006 в 18:10)
| | >Тогда вопрос, у меня почему то не работает функция
>preg_replace
Скорее всего не настроена локаль, попробуйте её настроить как это описывается в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=6084
>preg_replace, и что значит "\\1"???
Первые круглые скобки в регулярном выражении | |
|
|
|
|
|
|
|
для: romza
(23.01.2006 в 17:09)
| | Боязно спористь со знатоками, но позволю себе эту вольность=)
Зачем тут регулярные выражения вообще?
<?
$search="шАгАЮ";
$text = "Я иду шагаю по Москве...";
echo str_ireplace("$search","<b>$search</b>",$text); // регистронезависимая замена
?>
|
Результат:
Я иду шАгАЮ по Москве.... | |
|
|
|
|
|
|
|
для: Киналь
(23.01.2006 в 22:08)
| | Потому что в данном случае:
<?
$search="шагаю";
$text = "Я иду ШаГАю по Москве...";
echo str_ireplace("$search","<b>$search</b>",$text); // регистронезависимая замена
?>
|
Выведет Я иду шагаю по Москве... а нужно Я иду ШаГАю по Москве... | |
|
|
|
|
|
|
|
для: Евгений Петров
(23.01.2006 в 22:43)
| | Так я же объясняю, в случае применения функций str_ireplace() и str_replace() запарывается вывод... работает почему -то только функция eregi_replace(), но она заменяет слово из базы, на введенное слово пользователем из переменной $search, а мне нужно что бы слово само не заменялось, а по краям обрамлялось какими-либо тегами выделения. | |
|
|
|
|
|
|
|
для: Евгений Петров
(23.01.2006 в 22:43)
| | Странно, у меня выводит именно шАгАЮ. Может. дело в версии РНР? У меня 5.0.2. | |
|
|
|
|
|
|
|
для: Киналь
(24.01.2006 в 09:58)
| | Код... если что не так, подправте плиз... но выходит замена только если использовать функцию eregi_replace(), почему???
<?PHP
/* Получение поисковой строки GET методом */
$asdf=$_GET["keywords"];
/* Обрезка пробелов по краям строки*/
$asdf = trim($asdf);
/* Получение массива с результатами поиска из файла */
$arr=$rn["search"]["keywords"];
$asdfa = $asdf;
setlocale (LC_ALL, array ('ru_RU.CP1251', 'rus_RUS.1251'));
$exp_asdfa = explode(" ", $asdfa);
$rus = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
$rus_to = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
$engl = "abcdefghijklmnopqrstuvwxyz";
$engl_to = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$asdf = strtr ($asdf, $rus, $rus_to);
$asdf = strtr ($asdf, $engl, $engl_to);
/* Перревод поисковой строки в массив */
$exp_asdf = explode(" ", $asdf);
/* Колличестов циклов в массиве выделения искомого слова*/
$quan = count($exp_asdf);
--$quan;
/* Создание цикла для дальнейшей обработки результатов вывода */
foreach($arr as $v)
{
/* Замена в строке резултатов вывода знаков "(", " )", "/", "," на пробел */
$repl_v = $v["e_title"];
$repl_v = str_replace("(", " ", $repl_v);
$repl_v = str_replace(")", " ", $repl_v);
$repl_v = str_replace("/", " ", $repl_v);
$repl_v = str_replace(",", " ", $repl_v);
$repl_v = strtr ($repl_v, $rus, $rus_to);
$repl_v = strtr ($repl_v, $engl, $engl_to);
/* Создание массива из строки результата поиска */
$exp_v = explode(" ", $repl_v);
/* Выборка строки полного соответствия запросу */
$exp_v[ ] = null;
$exp_asdf = array_pad ($exp_asdf , count($exp_v), null);
/* Если все поисковые слова присутствуют */
if(count(array_diff($exp_asdf, $exp_v)) === 0)
{
/* Замена введенного слова на выделенное */
for ($i=0; $i<count($exp_asdf); $i++)
{
/* Выделение поисковых слов eregi_replace*/
$v["e_title"] = eregi_replace($exp_asdfa[$i], "<span style='color: #000000'><b>".$exp_asdfa[$i]."</b></span>", $v["e_title"]);
if($i == $quan)
{
/* Вывод результата поиска */
echo '<div style="padding: 7px 0px 10px 0px; border-bottom: 1px dotted #cccccc"><a href="'.$v["href"].'" target="_blank" style="color:#000000">'.$j.'. '.$v["e_title"].'</a></div>';
}
}
/* Увеличение значения счетчика на единицу */
$j++;
}
}
?>
|
| |
|
|
|
|
|
|
|
для: romza
(24.01.2006 в 10:04)
| | Прошу прощения, str_replace работает, тока она регистрозависима... и выделение не просиходит вообще... | |
|
|
|
|
|
|
|
для: romza
(24.01.2006 в 13:50)
| | Ну может кто нить подскажет мне... что не так... | |
|
|
|
|
|
|
|
для: romza
(25.01.2006 в 14:09)
| | Спасибо всем за понимание... :( | |
|
|
|