preg заменить проблемы гиперссылками
Прежде чем я решил опубликовать свой первый вопрос на StackOverflow, я стал совершенно сумасшедшим, так что вот он:
У меня есть сайт, который использует Google Calendar API для извлечения записей о событиях. В разделе Описание пользователи могут заполнить некоторые сведения о событии. Теперь я хотел бы, чтобы они могли вставлять гиперссылки. Это может произойти несколькими способами. Типы пользователей:
www.test.com
http(s)://test.com
http(s)://www.test.com
<a href="[one of above]" target="_blank">test.com</a>
То, что я Отчаянно ищу for-это способ преобразовать их все в формат <a href="[http:// OR https:// OR www.]test.com" target="_blank">test.com</a>
Я уже пробовал этот синтаксис:
$pattern = "/(?i)b((!<?:https?://|wwwd{0,3}[.]|[a-z0-9.-]+[.][a-z]{2,4}/)(?:[^s()<>]+|(([^s()<>]+|(([^s()<>]+)))*))+(?:(([^s()<>]+|(([^s()<>]+)))*)|[^s`!()[]{};:'".,<>?«»“”‘’]))/";
$description = preg_replace($pattern, "<a href='http://$1'>$1</a>", $description);
Он делает изменение всех событий в формате www.test.com в правильной гиперссылке он не изменяет события в формате http (S): / /www.test.com и http(s)://test.com ввод в формате <a href="[one of above]" target="_blank">test.com</a>
превращается в беспорядок.
3 ответа:
Попробуйте заключить s в квадратные скобки:
$pattern = "/(?i)\b((!<?:http[s]?:\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’]))/";
Или:
$description = preg_replace('/(http[s]?:\/\/[^\s]*)/i', '<a href="$1">$1</a>', $description);
Вы можете использовать:
$input = preg_replace('/^(?:https?://)?((?:[\p{L}\p{N}-]+\.)+[\p{L}\p{N}-]+)\b/', '<a href="http://$1" target="_blank">test.com</a>', $input);
Наконец-то решил его с условием в PHP: вот код, чтобы другие могли его использовать. Добавляет путь после .домен/ сейчас.
Большое спасибо за вашу помощь!if (!stristr($description, '<a href')){ $pattern = "~(?:https?://)?((?:[\\p{L}\\p{N}-]+\\.)+[\\p{L}-]{2,5})((\\S)*)~m"; $description = preg_replace($pattern, "<a href=\"$0\" target=\"_blank\">$0</a>", $description); }