Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: перевести все слова кроме предлогов в ссылку на поиск
 
 автор: kak   (28.02.2008 в 21:18)   письмо автору
 
 

Подскажите где ошибка.

/// перевести слова в ссылки на поиск


$postbody="программирование в PHP"
echo preg_replace('/\b\w{3,}\b/i', '<a href="srchform.php?id_forum=1&name=\\0&numberthemes=30&srchwhere=2&id_forum=1&logic=0&send=Поиск">'.$postbody.'</a>',
    $postbody); 



Получается: программирование в PHP в программирование в PHP


Нужно каждое слово в ссылку, а не всё предложение в виде одной ссылки на поиск:
программирование в PHP


P.S Замучился уже, не получается и все...

   
 
 автор: kasmanaft   (29.02.2008 в 06:35)   письмо автору
 
   для: kak   (28.02.2008 в 21:18)
 

Само выражение работает правильно: линки получаются у вас srchform.php?id_forum=1&name=Программирование&... и srchform.php?id_forum=1&name=PHP&...
Проблема в том, что попадает между тегами: " '.$postbody.' ". Замените это на "\\0".

PS Тот "\\0", что попал в урл, нужно бы обработать urlencode(). (и "Поиск" вконце). Для этого можно воспользоваться preg_replace_callback() или модификатором "e".

   
 
 автор: kak   (29.02.2008 в 11:31)   письмо автору
 
   для: kasmanaft   (29.02.2008 в 06:35)
 

Спасибо, Помогаете не в первый раз : )

Часть выражения взял из Вашего примера (это то, что работает), а остальное сам, методом тыка написал вот и не пашет : )

Сейчас заменил, где Вы подсказали и все работает.

>> PS Тот "\\0", что попал в урл, нужно бы обработать urlencode(). (и "Поиск" вконце). Для этого можно воспользоваться preg_replace_callback() или модификатором "e".

А, это для чего нужно сделать, вроде все работает?

К сожалению я пока слабо понимаю, что к чему : )

   
 
 автор: kasmanaft   (29.02.2008 в 15:50)   письмо автору
 
   для: kak   (29.02.2008 в 11:31)
 

Гляньте тут. Доходчивее я вряд ли объясню :)

PS по спецификации положено, но браузеры и так понимают.. Другое дело, если бы в поиск могли попасть не только "буквы", но и спец. символы какие-нибудь вроде ?, & - тогда без кодирования не обойтись (и тут не следует).

   
 
 автор: kak   (29.02.2008 в 18:01)   письмо автору
 
   для: kasmanaft   (29.02.2008 в 15:50)
 

А если вот так записать, примерно:

$text="программирование в PHP ";
echo preg_replace('/\b[а-яА-ЯёЁ]{3,}\b/i', '<a href="srchform.php?id_forum&name=\\0&numberthemes=30&srchwhere=2&id_forum&logic=0&send=\\0">\\0</a>',$text);

Не поможет?

   
 
 автор: kasmanaft   (29.02.2008 в 19:07)   письмо автору
 
   для: kak   (29.02.2008 в 18:01)
 

Ну, это, практически, то же самое. Только в \w входят еще латинские буквы, цифры и некоторые знаки препинания (знак подчеркивания "_", может, дефис еще - не помню).. НО в URLе кириллицы быть не должно.

В общем, что-то вроде этого:
<?
function repl ($match) {
   return 
'<a href="srchform.php?id_forum=1&name=' urlencode($match[0]) . 
          
'&numberthemes=30&srchwhere=2&id_forum=1&logic=0&send=' 
          
urlencode("Поиск") . '">'.$match[0].'</a>';
}
echo 
preg_replace_callback ('/\b\w{3,}\b/''repl'$postbody);

   
 
 автор: kak   (29.02.2008 в 22:03)   письмо автору
 
   для: kasmanaft   (29.02.2008 в 19:07)
 

Спасибо, Понял немного

Вобщем если код страницы посмотреть, то слово "программирование" в url приняло вид: %EF%F0%EE%E3%F0%E0%EC%EC%E8%F0%EE%E2%E0%ED%E8%E5

Вот так и должно быть. Верно?

   
 
 автор: kasmanaft   (29.02.2008 в 22:12)   письмо автору
 
   для: kak   (29.02.2008 в 22:03)
 

Угу.

   
 
 автор: kak   (03.03.2008 в 19:09)   письмо автору
 
   для: kasmanaft   (29.02.2008 в 22:12)
 

Спасибо за помощь Kasmanaft

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования