|
|
|
| У этой конструкции
<?php
$url = preg_replace("/(http:\/\/([a-zA-Z_0-9\.\?\&\#\*\;\:\+\-\=\%\/]*))/i", " <a href=\"http://\\2\" target='_blank'>http://\\2</a>", $url);
?>
|
выявился такой недостаток: если ссылка длинная (две-три строки), то ее не переносит на новую строку, а раздвигаются границы окна, чтобы прописать ссылку одной строкой, что крайне неудобно. Как с этим бороться? | |
|
|
|
|
|
|
|
для: SS
(28.06.2006 в 22:13)
| | Собственно можно измерять размер \\2, если он превышает скажем 40 символов, урезать его и продолжать троеточием .... | |
|
|
|
|
|
|
|
для: cheops
(29.06.2006 в 02:16)
| | Как его измерить? | |
|
|
|
|
|
|
|
для: 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>";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: 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']);) | |
|
|
|
|
|
|
|
для: SS
(29.06.2006 в 18:46)
| | Дайте пожалуйста кусок текста, на котором вы отлаживаете Web-приложение, чтобы можно было воспроизвести ситуацию. | |
|
|
|
|
|
|
|
для: cheops
(29.06.2006 в 22:30)
| | Вы имеете ввиду конкретную ссылку?
http://penelope.uchicago.edu/Thayer/E/Roman/Texts/secondary/SMIGRA*/Accensi.html | |
|
|
|
|
|
|
|
для: 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 "Ничего не найдено";
}
?>
|
| |
|
|
|