Сначала вы захотите использовать предварительный просмотр, чтобы убедиться, что он не соответствует HTTP или HTTPS. Вы также можете добавить mailto
, если вас это беспокоит.
$str = preg_replace("/(?<=href=\")(?!http:\/\/|https:\/\/)([^\"]+)/i", "generate_book.php?link=$1", $str);
В этом регулярном выражении также используется заглядывание ((?<=href=\")
), так что оно фактически не соответствует href="
.
Предупреждения:
- Необходимо знать, какие схемы URL будут в HTML помимо HTTP и HTTPS, если таковые имеются.
- Некоторые теги, такие как тег
link
, также имеют атрибут href
. Убедитесь, что вы не заменяете их. Если вам нужно сопоставлять только теги A
с помощью регулярных выражений, ваша сложность регулярных выражений значительно возрастет, и все же не будет действительно безопасным.
- Regex Eval намного менее эффективен и небезопасен, но если вам нужно кодирование URL, вы можете попытаться закодировать его URL во время замены, как это делает второй возврат другого ответа.
- В целом, Regex не обязательно является лучшим решением для этого. Вам может быть лучше с парсером HTML ...