Я хотел передать данные, содержащие url
внутри него, и url
будет преобразован в ссылки, доступные по клику, но проблема в том, что когда я запускаю эту function
, она повторяется 3 раза, а данные обрабатываются 3 раза. Как я могу получить один вывод данных? Я попытался удалить конкатенацию .=
To just =
но затем обрабатывается только последний шаблон. Я хочу это в 3 www.ivotism.com
, потому что я хочу добавить http
в href
когда пользовательский вход - www.ivotism.com
, он будет <a href="http//www.ivotism.com">www.ivotism.com</a>
вместо <a href="www.ivotism.com">www.ivotism.com</a>
.
function linkify($inputText) {
//URLs starting with http://, https://, or ftp://
$replacePattern1 = '/(\b(https?|ftp):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/i';
$replacedText .= preg_replace($replacePattern1, '<a href="$1" target="_blank">$1</a>', $inputText);
//URLs starting with "www." (without // before it, or it'd re-link the ones done above).
$replacePattern2 = '/(^|[^\/])(www\.[\S]+(\b|$))/i';
$replacedText .= preg_replace($replacePattern2, '$1<a href="http://$2" target="_blank">$2</a>', $inputText);
//Change email addresses to mailto:: links.
$replacePattern3 = '/(([a-zA-Z0-9\-\_\.])+@[a-zA-Z\_]+?(\.[a-zA-Z]{2,6})+)/i';
$replacedText .= preg_replace($replacePattern3, '<a href="mailto:$1">$1</a>', $inputText);
return $replacedText;
}
Я запускаю код, как показано ниже:
$ab = "<br>1 http://www.ivotism.com <br>2 https://www.ivotism.com/hom.php?u=kira&id=2 <br>3 ftp://www.ivotism.com <br>4 w www.ivotism.com <br>5 [email protected]"; echo
linkify($ab);
Это результат, который я получил:
Вы можете выполнять все замены в одном вызове preg_replace
, помещая регулярные выражения и замены в массивы.
$resultText = preg_replace(array($replacePattern1, $replacePattern2, $replacePattern3),
array($replaceSub1, $replaceSub2, $replaceSub3),
$inputText);
$inputText
в качестве ввода каждый раз. Вам нужно использовать результат предыдущей замены.$replaceText
в$replaceText
2 и 3?