Парсинг ссылок и e-mail адресов в тексте

smitt

Новичок
Парсинг ссылок и e-mail адресов в тексте

Привет!

Мне нужно в тексте отправляемом пользователями заменять текстовые ссылки на кликабельные HTML ссылки, то же самое с e-mail адресами.

Я в принципе могу сделать это с помощью регулярных выражений, в этом ничего сложного, на первый взгляд, нет.

Но, вот начитался про разные методы взлома сайтов, в том числе с использованием уязвимостей при "кривом" парсинге ссылок и стало волнительно, а вдруг я лажану где-то и посетители, например, смогут вставлять в ссылки JavaScript, что было бы недопустимо.

Поэтому, хотел попросить совета у "старших товарищей", посоветуйте как сделать правильное, безопасное преобразование ссылок, может кто поделится кодом?
 

LeFF®

Новичок
делать ссылки через редирект, убьешь сразу 2х зайцев - и безопасность и не будет внешних ссылок (для SEO оптимизации полезно)
 

smitt

Новичок
я не против, но парсить-то ссылки на странице и заменять

http://ya.ru

на

<a href="/redir.php?url=http%3A%2F%2Fya.ru">http://ya.ru</a>

всё равно будет нужно, и тут мало-ли где я могу ошибиться.

-~{}~ 09.10.08 18:20:

Написал вот такую функцию преобразования URL, будет ли она достаточно безопасной?

Код:
function parse_url_str($str)
{
	preg_match_all("#[url]http://[/url][a-zA-Z0-9./&?\#%+,:=_-]+#is", $str, $matches);

	if (isset($matches[0]) and is_array($matches[0]) and count($matches[0]) > 0)
	{
		foreach ($matches[0] as $link)
		{
			$str = str_replace($link, "<a href='/tools/rd.php?url=".urlencode(base64_encode($link))."' target='_blank'>".$link."</a>", $str);
		}
	}

	return $str;
}
-~{}~ 09.10.08 18:24:

В файле rd.php происходит следующее

Код:
$url = base64_decode($_GET['url']);

if (is_array(parse_url($url)))
{
	header("location: ".$url);
}
 
Сверху