
人と自然を創造する - 誰もが健康であるために。
更新ログ(HTML・CSS・JS)‐ 主な内容のみ記録、後の変更・修正・改善のための参考ログ
- 2024/5/10サイト内検索機能
- トップページにサイト内検索を設置
PHP(原型):
ここから------------
<?php
// 検索キーワードを取得
$searchTerm = isset($_GET['q']) ? $_GET['q'] : '';
// 検索キーワードが入力されているかチェック
if (!empty($searchTerm)) {
$files = glob('../*.html'); // フォルダ内の全HTMLファイルを取得
$searchResults = [];
foreach ($files as $file) {
$content = file_get_contents($file); // ファイルの内容を取得
$lines = explode("\n", $content); // ファイルの内容を行に分割
foreach ($lines as $lineNumber => $lineContent) {
if (stripos($lineContent, $searchTerm) !== false) { // 大文字小文字を無視して検索
// HTMLタグを除外してマッチした行を取得
$lineContentWithoutTags = strip_tags($lineContent);
// ファイルとマッチした行を結果に追加
$searchResults[] = ['file' => $file, 'line' => $lineContentWithoutTags, 'lineNumber' => $lineNumber + 1];
break; // 最初に見つかった行のみを取得するためにループを抜ける
}
}
}
// 検索結果を出力
if (!empty($searchResults)) {
echo '<p>検索キーワード: ' . $searchTerm . '</p>';
foreach ($searchResults as $result) {
echo '<p><a href="' . $result['file'] . '">' . $result['file'] . '</a> - 行番号: ' . $result['lineNumber'] . ' - ' . htmlspecialchars($result['line']) . '</p>';
}
} else {
echo '<p>検索キーワードにマッチするページはありません。</p>';
}
} else {
echo '<p>検索キーワードを入力してください。</p>';
}
?>
ここまで------------
上記PHP(原型)に対して次の修正を加えた。
↓
↓
・HTML中のコメントを除去する
・スクリプトタグ内のコメントを除去する
・スタイルシート内のコメントを除去する
・特定のページやメニューバーのテキストを除外する条件を追加
・大文字小文字を無視して検索
・検索キーワードを含むの前後のコンテキスト(マッチした前後2行)を出力
・一部のHTMLタグが検索結果に出力されるためHTMLタグ記号を除外する
・メージタイトルを取得して出力
・メージの更新日時、ヒット件数も表示
・クリックイベントのソースコードが出力するので特定的に除外する
修正後のPHP:
ここから------------
<!-- 検索結果が出力されたページ上にも検索フォームを設置する -->
<form action="search.php" method="GET" target="_blank">
<input type="text" name="q" placeholder="検索キーワードを入力してください" value="<?php echo isset($_GET['q']) ? htmlspecialchars($_GET['q']) : ''; ?>">
<button type="submit">検索</button>
</form>
<?php
// 検索キーワードを取得
$searchTerm = isset($_GET['q']) ? $_GET['q'] : '';
// 検索キーワードが入力されているかチェック
if (!empty($searchTerm)) {
$files = glob('../*.html'); // フォルダ内の全HTMLファイルを取得
$searchResults = [];
foreach ($files as $file) {
$content = file_get_contents($file); // ファイルの内容を取得
// HTML中のコメントを除去する
$content = preg_replace('/!--(.|\s)*?-->/', '', $content);
// スクリプトタグ内のコメントを除去する
$content = preg_replace('/