3

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_axhp_p

私はどこか間違っていますか?サーバーではなくクライアント側でロード時にhtmlを見つけて置き換えるだけで、セキュリティリスク/大きなオーバーヘッドが発生しない場合はありませんか?

御時間ありがとうございます !

4

1 に答える 1