$1

', $markdownText);//←ここ!!!!!!!!!!!!!! // コード(#code)をHTMLのdiv class="code"タグに変換 $markdownText = preg_replace('/^#code (.+)/m', '

$1

', $markdownText); // 画像(#img)をHTMLのimgタグに変換 $markdownText = preg_replace('/^#img (.+)/m', '', $markdownText); // タイトル(#、##、###)をHTMLのhタグに変換 $markdownText = preg_replace('/^# (.+)/m', '

$1

', $markdownText); $markdownText = preg_replace('/^## (.+)/m', '

$1

', $markdownText); $markdownText = preg_replace('/^### (.+)/m', '

$1

', $markdownText); // 箇条書き(-)をHTMLのul/liタグに変換 $markdownText = preg_replace('/^- (.+)/m', '', $markdownText); return $markdownText; } // ユーズ内の絵文字を画像に置き換える function replaceEmojisWithImages($postText) { // ユーズ内で絵文字名(:emoji:)を検出して画像に置き換える $emojiPattern = '/:(\w+):/'; $postTextWithImages = preg_replace_callback($emojiPattern, function($matches) { $emojiName = $matches[1]; return "$emojiName"; }, $postText); // @username を検出してリンクに置き換える $usernamePattern = '/@(\w+)/'; $postTextWithImagesAndUsernames = preg_replace_callback($usernamePattern, function($matches) { $username = $matches[1]; $dbh = new PDO('mysql:charset=utf8mb4;dbname='.DB_NAME.';host='.DB_HOST, DB_USER, DB_PASS, array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, )); $mentionsuserQuery = $dbh->prepare("SELECT username, userid FROM account WHERE userid = :userid"); $mentionsuserQuery->bindValue(':userid', $username); $mentionsuserQuery->execute(); $mentionsuserData = $mentionsuserQuery->fetch(); if(empty($mentionsuserData)){ return "@$username"; }else{ return "@".$mentionsuserData["username"].""; } }, $postTextWithImages); return $postTextWithImagesAndUsernames; } function replaceURLsWithLinks($postText) { // URLを正規表現を使って検出 $pattern = '/(https?:\/\/[^\s]+)/'; preg_match_all($pattern, $postText, $matches); // 検出したURLごとに処理を行う foreach ($matches[0] as $url) { // ドメイン部分を抽出 $parsedUrl = parse_url($url); $domain = isset($parsedUrl['host']) ? $parsedUrl['host'] : ''; // ドメインのみを表示するaタグを生成 $link = "$domain"; // URLをドメインのみを表示するaタグで置き換え $postText = str_replace($url, $link, $postText); } return $postText; } class MessageDisplay { private $value; private $userid; public function __construct($value, $userid) { $this->value = $value; $this->userid = $userid; } public function display() { if (empty($this->value)) { echo '

ユーズがありません

'; } else { echo '
'; if(!empty($this->value['rpuniqid'])){ echo '

┗━ 一番上のユーズに返信

'; } echo '
'; echo ' '; echo ' ' . htmlentities($this->value['username']) . ''; echo ' '; if (false !== strpos($this->value['role'], 'official')) { echo '
'; echo '
'; echo '
'; echo '
'; } echo '
'; $day = date("Ymd", strtotime(htmlentities($this->value['datetime']))); if ($day == date("Ymd")) { echo date("今日 H:i", strtotime(htmlentities($this->value['datetime']))); } else { echo date("Y年m月d日 H:i", strtotime(htmlentities($this->value['datetime']))); } echo '
'; echo '
'; echo '

' . processMarkdownAndWrapEmptyLines(replaceEmojisWithImages(replaceURLsWithLinks(nl2br($this->value['ueuse'])))) . '

'; if (!empty($this->value['photo2']) && $this->value['photo2'] !== 'none') { echo '
'; echo ' 画像'; echo ' 画像'; echo '
'; } elseif (!empty($this->value['photo1']) && $this->value['photo1'] !== 'none') { echo '
'; echo ' 画像'; echo '
'; } if (!empty($this->value['video1']) && $this->value['video1'] !== 'none') { echo '
'; echo ' '; echo '
'; } if(!($this->value['abi'] == "none")){ echo '
'; echo '
'; echo '

' . htmlentities($this->value['username']) . 'さんが追記しました

'; echo '
'; echo '

'.replaceEmojisWithImages(replaceURLsWithLinks(nl2br($this->value['abi']))) . '

'; echo '

追記日時 : '. date("Y年m月d日 H:i", strtotime(htmlentities($this->value['abidate']))) . '

'; echo '
'; } echo '
'; echo '
'; if (false !== strstr($this->value['favorite'], $this->userid)) { echo ''; }else{ echo ''; } echo ''.htmlentities($this->value['reply_count']).''; if($this->value['account'] === $this->userid){ if($this->value['abi'] === "none"){ echo ''; } echo ''; } echo '
'; echo '
'; } } } ?>