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を見つけて置き換えるだけで、セキュリティリスク/大きなオーバーヘッドが発生しない場合はありませんか?
御時間ありがとうございます !