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

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

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

 

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

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

тема: Перенос строки ссылки
 
 автор: SS   (28.06.2006 в 22:13)   письмо автору
 
 

У этой конструкции


<?php
$url 
preg_replace("/(http:\/\/([a-zA-Z_0-9\.\?\&\#\*\;\:\+\-\=\%\/]*))/i"" <a href=\"http://\\2\" target='_blank'>http://\\2</a>"$url);
?>


выявился такой недостаток: если ссылка длинная (две-три строки), то ее не переносит на новую строку, а раздвигаются границы окна, чтобы прописать ссылку одной строкой, что крайне неудобно. Как с этим бороться?

   
 
 автор: cheops   (29.06.2006 в 02:16)   письмо автору
 
   для: SS   (28.06.2006 в 22:13)
 

Собственно можно измерять размер \\2, если он превышает скажем 40 символов, урезать его и продолжать троеточием ....

   
 
 автор: SS   (29.06.2006 в 13:06)   письмо автору
 
   для: cheops   (29.06.2006 в 02:16)
 

Как его измерить?

   
 
 автор: cheops   (29.06.2006 в 16:04)   письмо автору
 
   для: SS   (29.06.2006 в 13:06)
 

Можно поступить примерно так
<?php 
$url 
"http://softtime.ru";
$url preg_replace_callback(
            
"/(http:\/\/([a-zA-Z_0-9\.\?\&\#\*\;\:\+\-\=\%\/]*))/i"
            
"measure_string"
            
$url); 
function 
measure_string($out)
{
  if(
strlen($out[1]) > 40)
  {
    
// Очень длинный url
    
return " <a href=\"http://".$out[2]."\" target='_blank'>А здесь более короткий вариант URL</a>";
  }
  else
  {
    
// Нормальный url
    
return " <a href=\"http://".$out[2]."\" target='_blank'>http://".$out[2]."</a>";
  }
}
?>

   
 
 автор: SS   (29.06.2006 в 18:46)   письмо автору
 
   для: cheops   (29.06.2006 в 16:04)
 

Конструкция немножко сложнее, чем я привел, может поэтому не работает. Все выглядит вот так:

<?php
if (preg_match("/( http:\/\/([a-zA-Z_0-9\.\?\&\#\*\;\:\+\-\=\%\/]*))/i"$msg['mess'] )); # без [url=][/url]
{
$msg['mess'] = preg_replace_callback("/(http:\/\/([a-zA-Z_0-9\.\?\&\#\*\;\:\+\-\=\%\/]*))/i""measure_string"$msg['mess']);# Вывод ссылки без указания протокола
function measure_string($out

  if(
strlen($out[1]) > 40
  { 
    
// Очень длинный url 
    
return " <a href=\"http://".$out[2]."\" target='_blank'>А здесь более короткий вариант URL</a>"
  } 
  else 
  { 
    
// Нормальный url 
    
return " <a href=\"http://".$out[2]."\" target='_blank'>http://".$out[2]."</a>"
  } 
}
}
?>


При этом ругается:
Warning: preg_replace_callback() [function.preg-replace-callback]: requires argument 2, 'measure_string', to be a valid callback in /home/ancientrome/html/forum/engine/url.php on line 14
(line 14: $msg['mess'] = preg_replace_callback("/(http:\/\/([a-zA-Z_0-9\.\?\&\#\*\;\:\+\-\=\%\/]*))/i", "measure_string", $msg['mess']);)

   
 
 автор: cheops   (29.06.2006 в 22:30)   письмо автору
 
   для: SS   (29.06.2006 в 18:46)
 

Дайте пожалуйста кусок текста, на котором вы отлаживаете Web-приложение, чтобы можно было воспроизвести ситуацию.

   
 
 автор: SS   (30.06.2006 в 14:15)   письмо автору
 
   для: cheops   (29.06.2006 в 22:30)
 

Вы имеете ввиду конкретную ссылку?
http://penelope.uchicago.edu/Thayer/E/Roman/Texts/secondary/SMIGRA*/Accensi.html

   
 
 автор: cheops   (30.06.2006 в 18:55)   письмо автору
 
   для: SS   (30.06.2006 в 14:15)
 

Нужно было разместить функцию обратного вызова выше - теперь другая напасть, не срабатывает регулярное выражение
<?php 
function measure_string($out

  if(
strlen($out[1]) > 40
  { 
    
// Очень длинный url 
    
return " <a href=\"http://".$out[2]."\" target='_blank'>А здесь более короткий вариант URL</a>"
  } 
  else 
  { 
    
// Нормальный url 
    
return " <a href=\"http://".$out[2]."\" target='_blank'>http://".$out[2]."</a>"
  } 


$msg['mess'] = 'http://penelope.uchicago.edu/Thayer/E/Roman/Texts/secondary/SMIGRA/Accensi.html';
if (
preg_match("/( http:\/\/([a-zA-Z_0-9\.\?\&\#\*\;\:\+\-\=\%\/]*))/i"$msg['mess'] )) # без [url=][/url] 

  
$msg['mess'] = preg_replace_callback("/(http:\/\/([a-zA-Z_0-9\.\?\&\#\*\;\:\+\-\=\%\/]*))/i""measure_string"$msg['mess']);# Вывод ссылки без указания протокола 

else
{
  echo 
"Ничего не найдено";
}
?>

   
Rambler's Top100
вверх

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