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

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

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

 

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

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

тема: Слова в ссылки
 
 автор: Елена Смирнова   (05.01.2009 в 22:30)   письмо автору
 
 

Искала искала, так и не нашла ((
Скажите есть текст
слово, слово, слово2, слово2, слово4

как эти слова преобразовать в ссылки?

  Ответить  
 
 автор: Trianon   (05.01.2009 в 23:28)   письмо автору
 
   для: Елена Смирнова   (05.01.2009 в 22:30)
 

preg_replace с модификатором e либо preg_replace_callback
как должны выглядеть ссылки?

  Ответить  
 
 автор: Inviseble_Demon   (06.01.2009 в 06:48)   письмо автору
 
   для: Елена Смирнова   (05.01.2009 в 22:30)
 


<?PHP
$str
='слово, слово, слово2, слово2, слово4';
$str=urlencode($str);
?>


Теперь этот набор кирилицы можно использовать как URL для возврата в исходный вариант используй $str=urldecode($str);

Хотя я так и не понел что именно нужно ))
Обьясни поподробнее. Для чего это ? Как должна выгледеть ссылка ? И т.д.

  Ответить  
 
 автор: BinLaden   (06.01.2009 в 15:16)   письмо автору
 
   для: Inviseble_Demon   (06.01.2009 в 06:48)
 

-

  Ответить  
 
 автор: Елена Смирнова   (07.01.2009 в 01:54)   письмо автору
 
   для: BinLaden   (06.01.2009 в 15:16)
 

Нужно чтобы было так:

<a href="index.php?tag=слово">слово</a> <a href="index.php?tag=слово2">слово2</a> и т.д.

  Ответить  
 
 автор: Inviseble_Demon   (07.01.2009 в 06:35)   письмо автору
 
   для: Елена Смирнова   (07.01.2009 в 01:54)
 


<?PHP
$array
=array('слово''слово1',  'слово2',  'слово3',  'слово4',  'слово5''слово6');
for (
$i=0$i<count($array); $i++)
{
$str.="<a href=\"index.php?tag=".urlencode($array[$i])."\">$array[$i]</a><br>\r\n";
}
echo 
"$str";
?>

  Ответить  
 
 автор: Елена Смирнова   (07.01.2009 в 19:59)   письмо автору
 
   для: Inviseble_Demon   (07.01.2009 в 06:35)
 

Эта конструкция не подходит, так как у меня много разных слов в переменной, которые отделяются запятой...

  Ответить  
 
 автор: AcidTrash   (07.01.2009 в 20:18)   письмо автору
 
   для: Елена Смирнова   (07.01.2009 в 19:59)
 

так как у меня много разных слов в переменной, которые отделяются запятой...
explode по запятой.

  Ответить  
 
 автор: BinLaden   (07.01.2009 в 20:36)   письмо автору
 
   для: Елена Смирнова   (07.01.2009 в 19:59)
 

<?php

$s 
'слово, слово, слово2, слово2, слово4';
$s preg_replace('/(\\w+)(,|\\s|$)/e''"<a href=\"index.php?tag=" . urlencode("\\1") . "\">\\1</a>\\2"'$s);

echo 
$s;

?>

  Ответить  
 
 автор: Trianon   (07.01.2009 в 20:39)   письмо автору
 
   для: BinLaden   (07.01.2009 в 20:36)
 

необходимость htmlspecialchars для текста внутри тега никто не отменял.

  Ответить  
 
 автор: BinLaden   (07.01.2009 в 20:41)   письмо автору
 
   для: Trianon   (07.01.2009 в 20:39)
 

Туда не попадут символы, которые должны быть экранированы. Поэтому необходимо применить htmlspecialchars() до преобразования слов в ссылки.

  Ответить  
 
 автор: Trianon   (07.01.2009 в 20:56)   письмо автору
 
   для: BinLaden   (07.01.2009 в 20:41)
 

Может быть,конечно, Вы знаете некую дополнительную информацию об их источнике...
Я таковой в исходном посте не обнаружил.

  Ответить  
 
 автор: BinLaden   (07.01.2009 в 21:04)   письмо автору
 
   для: Trianon   (07.01.2009 в 20:56)
 

Туда не попадут символы, которые должны быть экранированы. Поэтому необходимо применить htmlspecialchars() до преобразования слов в ссылки.

Тип символов \w не включает <, >, &

  Ответить  
 
 автор: Trianon   (07.01.2009 в 21:09)   письмо автору
 
   для: BinLaden   (07.01.2009 в 21:04)
 

Это да, если \w , то верно .
А чего ради только \w ?

  Ответить  
 
 автор: BinLaden   (07.01.2009 в 21:14)   письмо автору
 
   для: Trianon   (07.01.2009 в 21:09)
 

Всё для Вас!

<?php 

$s 
'слово, слово, слово2, слово2, слово4'
$s preg_replace('/([^\\s,]+)(,|\\s|$)/e''"<a href=\"index.php?tag=" . urlencode("\\1") . "\">" . htmlspecialchars("\\1") . "</a>\\2"'$s); 

echo 
$s

?>

  Ответить  
 
 автор: Trianon   (07.01.2009 в 21:34)   письмо автору
 
   для: BinLaden   (07.01.2009 в 21:14)
 

Вот. Это что-то такое, что я имел в виду 05.01.2009 в 23:28 :)

  Ответить  
 
 автор: xx7   (07.01.2009 в 16:21)
 
   для: Елена Смирнова   (07.01.2009 в 01:54)
 

Вопрос как-то слишком общими словами.
Если есть только то что есть , то и правда самым оптимальным будет вариант с str_replace()
, если есть например слово22 , которое не нужно выделять , то тогда уже понадобится preg_
например зафиксировать \b - границы слов
<?
header
('content-type: text/plain; charset=windows-1251');
$txt 'слово2x слово, слово,
 слово2, слово2, слово4
как эти слова преобразовать'
;
echo 
preg_replace('#\bслово[24]?\b#ie',
 
'"<a href=\"" . urlencode("$0") . "\">$0</a>"',
  
$txt);
?>

, если нужны другие слова, то первым параметром будет массив типа
array(
'#\bраз\b#ie',
'#\bдва\b#ie',
'#\b(?:во)?семь\b#ie',
);
И могут быть другие сложности , такие как сделать ссылкой слово form , но не сделать его если это слово из тега <form> , или слово width ...
А так , наверное, по предпочтительности сначала str_replace(), потом preg_replace_callback() , потом только preg_replace() , если этих замен будет много,

  Ответить  
 
 автор: xx7   (07.01.2009 в 16:23)
 
   для: Елена Смирнова   (07.01.2009 в 01:54)
 

и наверное strtolower() придётся пробовать приделать,
если с /i модификатором

  Ответить  
 
 автор: Inviseble_Demon   (08.01.2009 в 04:20)   письмо автору
 
   для: Елена Смирнова   (05.01.2009 в 22:30)
 

Мне кажется или вы при придостовлении минимума информации ждете готового решения !?
Люди вам пишут пишут а вы кроме не не так толком ни чего не разьясняете !

  Ответить  
 
 автор: Елена Смирнова   (08.01.2009 в 19:49)   письмо автору
 
   для: Inviseble_Demon   (08.01.2009 в 04:20)
 

Я изяъснила как могла, слова через запятую перобразовать в ссылки с помощью рег. выр. что тут не понятно? Или не понятно, то что я не говорю каким методом мне это нужно сделать? Если бы я знала, может и не задавала бы вопрос здесь.

  Ответить  
 
 автор: xx7   (08.01.2009 в 22:28)
 
   для: Елена Смирнова   (08.01.2009 в 19:49)
 

такой вариант
<pre><?php
$txt 
'
слово1, слово2,
 слово3,
 слово4,     слово5
'
;

$txt split(',[^ЁА-яё]*'trim($txt));
// print_r($txt);
foreach ($txt AS $txt) {
 echo 
'<a href="/?x='urlencode($txt) . '">'
      
htmlspecialchars($txt) .'</a> ';
}
?>
но всёравно не понятно зачем такое может быть нужно :)

  Ответить  
 
 автор: Елена Смирнова   (09.01.2009 в 00:01)   письмо автору
 
   для: xx7   (08.01.2009 в 22:28)
 

Замечательно! Работает! Вот только как сделать чтобы он не только русские буквы обрабатывал, но и латиницу и цифры.

  Ответить  
 
 автор: xx7   (09.01.2009 в 00:56)
 
   для: Елена Смирнова   (09.01.2009 в 00:01)
 

Извиняюсь за то что по долго не читаю тут.
Можно разделить по запятым с пробельными символами
<pre><?php 
$txt 

слово1, word2, 
 2word3, 
 слово4,     слово5, 
 ~такое, только$ +тоже
 обработается
'


$txt split(',[[:space:]]*'trim($txt)); 
 
print_r($txt);

foreach (
$txt AS $txt) { 
 echo 
'<a href="/?x='urlencode($txt) . '">' 
      
htmlspecialchars($txt) .'</a> '
}
?> 

в split() у меня почему-то \s* не совпадало с переносами строк
можно было-бы просще сделать ', *' , если знать что там только пробелы.

насколько понял, это чётко заданная где-то строка, возможно тогда и просто ', '

  Ответить  
 
 автор: xx7   (09.01.2009 в 01:02)
 
   для: xx7   (09.01.2009 в 00:56)
 

\s вообще не работает в POSIX-выражениях :)

  Ответить  
 
 автор: Елена Смирнова   (12.01.2009 в 00:41)   письмо автору
 
   для: xx7   (09.01.2009 в 01:02)
 

Большое спасибо, это то, что надо!

  Ответить  
 
 автор: Елена Смирнова   (12.01.2009 в 00:41)   письмо автору
 
   для: xx7   (09.01.2009 в 01:02)
 

Большое спасибо, это то, что надо!

  Ответить  
Rambler's Top100
вверх

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