我正在尝试实现一个简单的函数,该函数给定文本输入,返回在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
和链接未按预期显示。我想这是因为 a 没有按预期创建 dom 层次结构(appendChild
例如使用方法),因此所有regex
替换都是一个字符串。
所以我解决这个问题的另一种方法是使用preg_match_callback
一个回调函数,该函数将创建xhp_a
并添加到下面的层次结构中,xhp_p
但这也不起作用。
我在某个地方错了吗?如果不存在任何安全风险/更大的开销,只需在客户端而不是服务器上查找和替换加载 html 吗?
谢谢你的时间 !