Я пытаюсь реализовать простую функцию, которая при вводе текста возвращает текст, измененный с xhp_a
при обнаружении ссылки в абзаце xhp_p
,
Рассмотрим этот класс
class Urlifier {
protected static $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
public static function convertParagraphWithLink(?string $input):xhp_p{
if (!$input)
return <p></p>;
else
{
if (preg_match(self::$reg_exUrl,$input,$url_match)) //match found
{
return <p>{preg_replace($reg_exUrl, '<a href="'.$url_match[0].'>'.$url_match[0].'</a>', $input)}<p>;
}else{//no link inside
<p>{$input}</p>
}
}
}
Проблема здесь в том, что xhp
ускользает html
и ссылки не отображаются, как ожидалось. Я полагаю, что это происходит потому, что не создают иерархию DOM, как ожидалось (с appendChild
метод например) и таким образом все regex
заменяет это строка.
Поэтому мой другой подход к этой проблеме заключался в использовании preg_match_callback
с функцией обратного вызова, которая создаст xhp_a
и добавить в иерархию под xhp_p
но это тоже не сработало.
Я где то не прав? Если бы не было какого-либо риска безопасности / больших накладных расходов, просто найти и заменить при загрузке HTML на стороне клиента, а не на сервере?
Спасибо за ваше время !
Задача ещё не решена.
Других решений пока нет …