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

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

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

 

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

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

тема: Длинные ссылки и preg_replace
 
 автор: Job   (07.07.2011 в 11:42)   письмо автору
 
 

Заменяю текстовые ссылки на html в тексте я вот так:
$text = preg_replace("/(http:\\/\\/www.|www.|http:\\/\\/)(\\S+)/si",'<a href="http://\\2" target="_blank">\\2</a>',$text); 

но существует проблема, если ссылка длинная, например на википедию, она не вмещается в структуру сайта и из-за этого веся вёрстка ползёт!!!

Подскажите, как сократить отображаемый текст ссылки например до 40 символов, но чтоб при этом сама ссылка работала.

Типа вот так:

<a href="http://yandex.ru/yandsearch?text=%D1%85%D0%BE%D1%87%D1%83+%D0%BA%D0%BE%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%B5+%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8&clid=139094&lr=213">http://yandex.ru/yandsearch?text=%D1%85...</a>


В голову приходит только это...

<?
$text 
"elkjnwelfjefl http://yandex.ru/yandsearch?text=%D1%85%D0%BE%D1%87%D1%83+%D0%BA%D0%BE%D1%80%D0%BE%D1%82%D0%BA%D0%B8%D0%B5+%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8&clid=139094&lr=213 hgwekjgn";
if(
preg_match("/(http:\\/\\/www.|www.|http:\\/\\/)(\\S+)/si"$text$save)) 
{
$link $save[2];
$link "http://".$link;
if(
strlen($link)>40)
{
$link substr($link,0,40);
$link $link."...";
}
$text preg_replace("/(http:\\/\\/www.|www.|http:\\/\\/)(\\S+)/si",'<a href="http://\\2" target="_blank">'.$link.'</a>',$text); 
}
echo(
$text);
?>


но мне кажется это полный бред......
))))

тем более если две ссылки в тексте уже не прокатит.....

  Ответить  
 
 автор: cheops   (07.07.2011 в 12:23)   письмо автору
 
   для: Job   (07.07.2011 в 11:42)
 

Обычно для этого используют функцию preg_replace_callback(), которая позволяет задать функцию обратного вызова для замены. В этом функции вы можете осуществить любые преобразования, в том числе и те, которые привели выше.

  Ответить  
 
 автор: Deed   (07.07.2011 в 15:35)   письмо автору
 
   для: Job   (07.07.2011 в 11:42)
 


<?
$num_links
=preg_match_all("/(?<!\")(((f|ht){1}tp:\/\/)[-a-zA-Z0-9@:%_\+.;~#?&\/\/=]+)(?!\.(jpg|jpeg|gif|png|bmp|psd|ico)\")/i",$text,$link_out);

unset(
$link_out[0]);

if(
$num_links>0){
    for(
$i=0;$i<$num_links;$i++){
        
$click1=parse_url($link_out[1][$i]);
        
$click=$click1['host'];
        
$link=$link_out[1][$i];
        
$search2[]=$link;
        
$replace2[]="<a href=\"{$link}\" target=\"_blank\">{$click}</a>"// Отображаться на странице будет только host, а не вся ссылка. Так красивее.
    
}
    
    
$answer=str_replace($search2,$replace2,$text);
    
    
}
else{
$answer=$text;} //Если в $text ссылок не было, оставляем без изменений.


?>

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

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