使用PHP自动链接单词

时间:2012-01-20 04:59:17

标签: php

我有数以千计的PHP页面,其中包含使用php的页眉和页脚,如

<?php include("header.php"); ?> //STATIC CONTENT HERE  <?php include("footer.php"); ?>

我想为静态文本中的某些关键字实现自动关键字链接。但我只能将PHP代码添加到我的页眉或页脚文件中。

2 个答案:

答案 0 :(得分:5)

这可能是一项复杂的操作。步骤:

  1. 获取要替换其字词的所有文件(glob
  2. 为“查找”和“替换”条件指定一个或多个数组
  3. 迭代glob返回的文件,随时替换文字(preg_replace
  4. 撰写新文字(file_put_contents
  5. 此示例代码将$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所说这可能效率低下,但如果你需要动态替换关键字(例如,使用基于数据库的链接),那么这可能是一个很好的解决方案......