Как преобразовать URL-адреса, содержащие символы Юникода, в интерактивные ссылки? - PullRequest
1 голос
/ 05 августа 2010

Я использую эту функцию для создания URL-адресов для кликабельных ссылок, но проблема в том, что когда в URL-адресе присутствует какой-либо символ Unicode, он становится кликабельным ссылками только перед этим символом ...

Функция:

function clickable($text) {
    $text = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
                          '<a class="und" href="\\1">\\1</a>', $text);
    $text = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)',
                          '\\1<a href="http://\\2">\\2</a>', $text);
    $text = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})',
                          '<a href="mailto:\\1">\\1</a>', $text);

return $text;

}

Как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 05 августа 2010

Прежде всего, не используйте eregi_replace.Я не думаю, что это возможно использовать с Unicode - и это устарело от PHP 5.3.Используйте preg_replace.

Тогда вы можете попробовать что-то подобное

preg_replace("/(https?|ftps?|mailto):\/\/([-\w\p{L}\.]+)+(:\d+)?(\/([\w\p{L}\/_\.#]*(\?\S+)?)?)?/u", '<a href="$0">$0</a>

РЕДАКТИРОВАТЬ - обновленное выражение, включающее # символ

0 голосов
/ 05 августа 2010

Попробуйте использовать \ p {L} вместо a-zA-Z и \ p {Ll} вместо az

Подробности обработки Юникода можно найти в регулярных выражениях здесь

Привыкайте использовать функции preg вместо устаревших функций ereg

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...