我有数以千计的PHP页面,其中包含使用php的页眉和页脚,如
<?php include("header.php"); ?> //STATIC CONTENT HERE <?php include("footer.php"); ?>
我想为静态文本中的某些关键字实现自动关键字链接。但我只能将PHP代码添加到我的页眉或页脚文件中。
答案 0 :(得分:5)
这可能是一项复杂的操作。步骤:
glob
)glob
返回的文件,随时替换文字(preg_replace
)file_put_contents
)此示例代码将$words
数组中的所有字词替换为http://www.wordlink.com/<yourword>
的链接。如果您需要为每个单词添加不同的链接,则需要使用$replace
将$1
指定为数组,您希望搜索到的单词出现在替换中(并更改$replace
正则表达式为$replace[$i]
)。
此外,下面的glob
函数查找指定的$filesDir
目录中的所有html文件。如果您需要不同的东西,则必须自己手动编辑glob
路径。最后,使用的正则表达式仅替换整个单词。即如果你想替换 super 这个词, superman 这个词就不会在中间替换 super 这个词。
哦,根据模式末尾的i
修饰符,替换为 NOT 区分大小写。
// specify where your static html files live
$filesDir = '/path/to/my/html/files/';
// specify where to save your updated files
$newDir = '/location/of/new/files/';
// get an array of all the static html files in $filesDir
$fileList = glob("$filesDir/*.html");
$words = array('super', 'awesome');
$replace = '<a href="http://www.wordlink.com/$1">$1</a>';
// iterate over the html files.
for ($i=0; $i < count($fileList); $i++) {
$filePath = $filesDir . $fileList[$i];
$newPath = $newDir . $fileList[$i];
$html = file_get_contents($filePath);
$pattern = '#\b(' . str_replace('#', '\#', $words[$i]) . ')\b#i';
$html = preg_replace($pattern, $replace, $html);
file_put_contents($newPath, $html);
echo "$newpath file written\n";
}
显然,您需要对新文件夹位置进行写访问。我不建议覆盖原始文件。翻译:
P.S。正则表达式不是UTF-8安全的,所以如果你正在处理国际字符,你也需要编辑正则表达式模式。
P.P.S。我真的很善良,因为SO 不一个免费的代码网站。当我尝试它时,甚至不要考虑评论“它不起作用”这样的东西:)如果它不符合你的规格,请随意浏览所涉及功能的php手册。
答案 1 :(得分:2)
这只是一个想法。我做了一个快速测试,看起来很有效......
<?php
include("header.php");
ob_start();
?>
//STATIC CONTENT HERE
<?php
$contents = ob_get_contents();
ob_end_clean();
// now you have all your STATIC CONTENT HERE into $contents var
// so you can use preg_replace on it to add your links
echo $contents_with_my_links;
include("footer.php");
?>
确实,您应该将此代码添加到当前页眉/页脚文件中。
行。它只是一个解决问题的想法。正如rdlowrey
所说这可能效率低下,但如果你需要动态替换关键字(例如,使用基于数据库的链接),那么这可能是一个很好的解决方案......