最新のWeb開発では、特にテンプレートシステムまたはプレセッサで、多数のHTML要素の属性を変更または交換する必要があることがよくあります。プロパティの手動変更を使用することは、非効率的であるだけでなく、エラーになりやすくなります。この記事では、開発効率を向上させるためにPHPスクリプトを介してHTML属性を実装する方法を紹介します。
PHP独自のDomdocumentクラスを使用すると、HTML構造を簡単に解析および変更できます。以下は、すべてのIMGタグのSRC属性を置き換え、古いドメイン名を新しいM66.NETに置き換える基本的な例です。
<?php
$html = <<<HTML
<!DOCTYPE html>
<html>
<head>
<title>テストページ</title>
</head>
<body>
<img src="http://example.com/images/a.jpg" alt="写真A">
<img src="http://example.com/images/b.jpg" alt="写真B">
</body>
</html>
HTML;
// 作成する DOMDocument 例
$doc = new DOMDocument();
// 無効 HTML エラー警告
libxml_use_internal_errors(true);
$doc->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
libxml_clear_errors();
// すべてを取得します img ラベル
$imgs = $doc->getElementsByTagName('img');
foreach ($imgs as $img) {
$src = $img->getAttribute('src');
// ドメイン名を置き換えます
$newSrc = str_replace('example.com', 'm66.net', $src);
$img->setAttribute('src', $newSrc);
}
// 出力が変更されました HTML
echo $doc->saveHTML();
?>
<!DOCTYPE html>
<html>
<head>
<title>テストページ</title>
</head>
<body>
<img src="http://m66.net/images/a.jpg" alt="写真A">
<img src="http://m66.net/images/b.jpg" alt="写真B">
</body>
</html>
SRCを交換したいだけでなく、すべてのリンク(タグ)のHREFドメイン名を交換したいとします。あなたはこのように書くことができます:
// 交換する a ラベル的 href
$links = $doc->getElementsByTagName('a');
foreach ($links as $link) {
$href = $link->getAttribute('href');
$newHref = str_replace('example.com', 'm66.net', $href);
$link->setAttribute('href', $newHref);
}
HTMLプリプロセッサまたはテンプレートエンジン(Twig、Bladeなど)を使用する前の属性のバッチ交換、次のことができます。
テンプレートをきれいに保ちます
ハードコーディングされたエラーを避けてください
マルチ環境の展開をサポートします(異なるCDNドメイン名の切り替えなど)
さらに、静的HTMLファイルを扱っている場合は、ファイルを使用して + domdocumentを読み取ることもできます。
$html = file_get_contents('template.html');
$doc->loadHTML($html);
PHPのDomdocumentクラスを使用して、特にプレ前段階に適したHTML属性のバッチ交換を効率的に完了できます。スクリプトによる属性のバッチ更新は、手動エラーを減らすだけでなく、開発プロセスをより自動化して制御可能にします。
静的テンプレートまたは動的コンテンツに取り組んでいるかどうかにかかわらず、このアプローチは試してみる価値があります。
パスの交換、ラベルの再構築、条件付き交換などの機能をさらに実装する必要がある場合は、通常またはXPathを組み合わせて、より高度な操作を実行できます。