[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нужна функция по обработке ссылки
Секстурист
Нужно прогнать строку через htmlspecialchars,
не затрагивая в ней ссылки и ссылки любого вида урезать до:
<a href="href.value">Link</a>

В голове вертится только preg_replace, но с регулярными у меня проблема и времени нет - задача срочная. crying.gif

Буду благодарен за решение. clapping.gif



Спустя 2 минуты, 55 секунд (5.09.2007 - 10:47) vasa_c написал(а):
Как незатрагивая? Что значит ссылки любого вида урезать до? Нужно ли затрагивать содержимое ссылок?
Приведите пример исходного и конечного текстов.

Спустя 2 часа, 28 минут, 25 секунд (5.09.2007 - 13:15) Секстурист написал(а):
Цитата(vasa_c @ 5.9.2007, 11:47) [snapback]26808[/snapback]
Как незатрагивая?

Т.е оставить ссылку HTML-кодом (не заменять её на мнемоники).

Цитата(vasa_c @ 5.9.2007, 11:47) [snapback]26808[/snapback]
Что значит ссылки любого вида урезать до?

Значит оставить у ссылки только атрибут "href", все остальные атрибуты вырезать (если они есть).

Цитата(vasa_c @ 5.9.2007, 11:47) [snapback]26808[/snapback]
Нужно ли затрагивать содержимое ссылок?


Если внутри ссылки есть теги, то их нужно заменить на мнемоники.
Цитата(vasa_c @ 5.9.2007, 11:47) [snapback]26808[/snapback]
Приведите пример исходного и конечного текстов.

До:
Код
< b > text < /b >
<a href="page.htm" style="font-weight: bold"> Ссылка </a>
<a  style="font-weight: bold" href="page.htm"> Ссылка 2 </a>

После:
Код
< b > text < /b >
<a href="page.htm">Ссылка</a>
<a href="page.htm">Ссылка 2</a>


Спасибо.

Спустя 7 минут, 18 секунд (5.09.2007 - 13:22) Секстурист написал(а):
В общем, пользователь может вводить текст в форму, любой HTML который он введёт будет отображаться как обычный текст, кроме ссылок, ссылки будут отображаться как HTML-ссылки. Это мне и нужно решить...

Спустя 1 час, 13 минут, 57 секунд (5.09.2007 - 14:36) vasa_c написал(а):
Первое, что на ум пришло:

Код
$exp = explode('<', $code);
$ret .= array_shift($exp);
foreach ($exp as $el) {    
    $el = explode('>', $el);    
    if (preg_match('~^a\s.*?href\s*=\s*(("([^"]*)")|(\'([^\']*)\')|(\S*))~is', $el[0], $matches)) {        
        if (!empty($matches[2])) {
            $href = $matches[3];
        } elseif (!empty($matches[4])) {
            $href = $matches[5];
        } else {
            $href = $matches[6];
        }
        if (preg_match('~^java script:~i', $href)) {
            $href = '#';
        }                
        $ret .= '<a href="'.$href.'">';
    } elseif (preg_match('~^/a\s*$~is', $el[0])) {
        $ret .= '</a>';
    } else {        
        $ret .= '&lt;'.htmlSpecialChars($el[0]).'&gt;';
    }
    $ret .= (isSet($el[1])) ? htmlSpecialChars($el[1]) : '';
}

Спустя 19 часов, 49 минут, 53 секунды (6.09.2007 - 10:26) Секстурист написал(а):
vasa_c, спасибо большое! работает отлично smile.gif


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.