Skip to content

Commit

Permalink
マークダウンの文字列に[]()が入れ子になる時にもリンクが作成できるよいうにした。\[のようにエスケープする。
Browse files Browse the repository at this point in the history
  • Loading branch information
satopian committed Dec 9, 2024
1 parent aafe463 commit 9791836
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 13 deletions.
31 changes: 22 additions & 9 deletions petitnote/functions.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?php
$functions_ver=20241126;
$functions_ver=20241209;
//編集モードログアウト
function logout(){
$resno=(int)filter_input(INPUT_GET,'resno',FILTER_VALIDATE_INT);
Expand Down Expand Up @@ -555,15 +555,28 @@ function com($str,$verified=false){
return nl2br($str,false);

}

//マークダウン記法のリンクをHTMLに変換
function md_link($str,$verified=false){
if($verified){
$rel='rel="noopener noreferrer"';
}else{
$rel='rel="nofollow noopener noreferrer"';
}
$str= preg_replace("{\[([^\[\]\(\)]+?)\]\((https?://[\w!\?/\+\-_~=;:\.,\*&@#\$%\(\)'\[\]]+)\)}",'<a href="$2" target="_blank" '.$rel.'>$1</a>',$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 '<a href="'.$url.'" target="_blank" '.$rel.'>'.$text.'</a>';
}, $str);

return $str;
}

Expand Down
13 changes: 9 additions & 4 deletions petitnote/index.php
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<?php
//Petit Note (c)さとぴあ @satopian 2021-2024
//1スレッド1ログファイル形式のスレッド式画像掲示板
$petit_ver='v1.61.1';
$petit_lot='lot.20241208';
$petit_ver='v1.62.2';
$petit_lot='lot.20241209';

$lang = ($http_langs = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : '')
? explode( ',', $http_langs )[0] : '';
Expand All @@ -17,7 +17,7 @@
return die(__DIR__.'/functions.php'.($en ? ' does not exist.':'がありません。'));
}
require_once(__DIR__.'/functions.php');
if(!isset($functions_ver)||$functions_ver<20241124){
if(!isset($functions_ver)||$functions_ver<20241209){
return die($en?'Please update functions.php to the latest version.':'functions.phpを最新版に更新してください。');
}
check_file(__DIR__.'/misskey_note.inc.php');
Expand Down Expand Up @@ -2240,7 +2240,12 @@ function search(){
$out[0][$i] = create_res($line,(['catalog' => 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;
Expand Down

0 comments on commit 9791836

Please sign in to comment.