diff --git a/petitnote/functions.php b/petitnote/functions.php index e461e435..2d71b083 100644 --- a/petitnote/functions.php +++ b/petitnote/functions.php @@ -1,5 +1,5 @@ $1',$str); - +function md_link($str, $verified = false) { + $rel = $verified ? 'rel="noopener noreferrer"' : 'rel="nofollow noopener noreferrer"'; + + // 正規表現パターンを使用してマークダウンリンクを検出 + $pattern = "{\[((?:[^\[\]\\\\]|\\\\.)+?)\]\((https?://[^\s\)]+)\)}"; + + // 変換処理 + $str = preg_replace_callback($pattern, function($matches) use ($rel) { + // エスケープされたバックスラッシュを特定の文字だけ解除 + $text = str_replace(['\\[', '\\]', '\\(', '\\)'], ['[', ']', '(', ')'], $matches[1]); + $url = filter_var($matches[2], FILTER_VALIDATE_URL) ? $matches[2] : ''; + // 変換されたHTMLリンクを返す + if(!$url){ + // URLが無効ならテキストだけ返す + return $text; + } + // URLが有効ならHTMLリンクを返す + return ''.$text.''; + }, $str); + return $str; } diff --git a/petitnote/index.php b/petitnote/index.php index 96ca1247..64f71e71 100644 --- a/petitnote/index.php +++ b/petitnote/index.php @@ -1,8 +1,8 @@ true] + $txt_search));//$lineから、情報を取り出す // マークダウン - $com= preg_replace("{\[([^\[\]\(\)]+?)\]\((https?://[\w!\?/\+\-_~=;:\.,\*&@#\$%\(\)'\[\]]+)\)}","$1",$out[0][$i]['com']); + $pattern = "{\[((?:[^\[\]\\\\]|\\\\.)+?)\]\((https?://[^\s\)]+)\)}"; + $com = preg_replace_callback($pattern, function($matches) { + // エスケープされたバックスラッシュを特定の文字だけ解除 + return str_replace(['\\[', '\\]', '\\(', '\\)'], ['[', ']', '(', ')'], $matches[1]); + }, $out[0][$i]['com']); + $com=h(strip_tags($com)); $com=mb_strcut($com,0,180); $out[0][$i]['com']=$com;