|
|
|
| Вобщем есть у меня поиск ЮРЛ адресов по выражению и последующая его обработка функцией getURL:
$str = preg_replace("#http://([а-яёa-z\d][а-яёa-z\d\-]*\.)+[а-яёa-z]{2,6}(/([а-яё\w\-\.]*[а-яё\w\-/]{1})*(\?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?(&(amp;)?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?)*)?)?#ui", getURL('$0'), $str);
function getURL($url)
{
if(mb_strlen($url, U) > 35)
$urlName = mb_substr($url, 0, 25, U) . '...' . mb_substr($url, mb_strlen($url, U) - 5, 5, U);
else
$urlName = $url;
$url = '<a href="' . $url . '">' . $urlName . '</a>';
return $url;
}
|
Ссылка выводится правильно, но не обрезается. При замене последних двух строк на
//$url = '<a href="' . $url . '">' . $urlName . '</a>';
return $url;
|
как результат я получаю "2". В чем проблема? | |
|
|
|
|
|
|
|
для: Z3RO
(27.02.2012 в 17:58)
| | Константа U = 'UTF-8'; | |
|
|
|
|
|
|
|
для: Z3RO
(27.02.2012 в 17:58)
| | Или же предложите другой вариант передачи результата функции, но только именно с этим выражением. | |
|
|
|
|
|
|
|
для: Z3RO
(27.02.2012 в 19:07)
| | Я канешн извиняюсь, но помогите, пожалуйста. | |
|
|
|
|
|
|
|
для: Z3RO
(28.02.2012 в 01:01)
| | Не очень понятно почему в вашем варианте происходит именно так, но работает вот так:
<?php
mb_internal_encoding("utf-8");
function getURL($matches){
if(mb_strlen($matches[0]) > 35)
$urlName = mb_substr($matches[0], 0, 25) . '...' . mb_substr($matches[0], mb_strlen($matches[0]) - 5);
else
$urlName = $matches[0];
$url = '<a href="' . $matches[0] . '">' . $urlName . '</a>';
return $url;
}
$str = "http://softtime.ru/forum/read.php?id_forum=6&id_theme=85370";
$pattern = "#http://([а-яёa-z\d][а-яёa-z\d\-]*\.)+[а-яёa-z]{2,6}(/([а-яё\w\-\.]*[а-яё\w\-/]{1})*(\?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?(&(amp;)?(([a-z][\w\-]*)?(=(%[a-z\d]{2}|[\w\-\.\+])*)?)?)*)?)?#ui";
echo $str = preg_replace_callback( $pattern , 'getURL' , $str );
?>
|
Наверно все-таки нужно использовать функции по назначению.... И если придумали preg_replace_callback, значит вызов функций в preg_replace не очень-то и предусмотрен ))) | |
|
|
|
|
|
|
|
для: Sfinks
(28.02.2012 в 10:11)
| | Понял почему у вас происходило то что происходило.
В функцию передается не то что скрыто под $0, а именно "$0". Поэтому длина строки всегда равна 2, и функция возвращает строку '<a href="$0">$0</a>', и вот она уже использовалась для подстановки в preg_match(); | |
|
|
|
|
|
|
|
для: Sfinks
(28.02.2012 в 10:54)
| | Спасибо. Сейчас попробую. Я же писал, кстати, что передается именно $0, а не его значение. :) | |
|
|
|