Discuz教程网

如何使用php给文本中的关键词加上链接

[复制链接]
authicon dly 发表于 2012-8-13 14:47:27 | 显示全部楼层 |阅读模式
  1. <?php
  2. /**
  3. * 按长度排序(降序)
  4. */
  5. function _sortDesc($a, $b) {
  6. return (strlen($a[0]) < strlen($b[0])) ? 1 : -1;
  7. }

  8. $linkDefs = array(
  9.   '茶叶,111.htm',
  10.   '中国茶叶大观,222.htm',
  11. );

  12. $linkMap = array();
  13. foreach($linkDefs as $row) {
  14. $linkMap[] = explode(',', $row);
  15. }

  16. $str = '
  17. 这儿是茶叶的链接。<br />
  18. 这儿是中国茶叶大观的链接。<br />
  19. 这儿是<a href="111.html">茶叶</a>的现有链接。<br />
  20. 这儿是<a href="222.html">中国茶叶大观</a>的现有链接。<br />
  21. ';

  22. //把原有的链接替换成文字
  23. foreach($linkMap as $row) {
  24. $str = preg_replace('/(<a.*?>\s*)('.$row[0].')(\s*<\/a>)/sui', '${2}', $str);
  25. }

  26. //关键字从长至短排序
  27. usort($linkMap, '_sortDesc');
  28. //var_dump($linkMap);

  29. $tmpKwds = array(); //存放暂时被替换的子关键字

  30. foreach($linkMap as $i=>$row) {
  31. list($kwd, $url) = $row;
  32. for($j=$i+1; $j<count($linkMap); $j++) {
  33.   $subKwd = $linkMap[$j][0];
  34.    //如果包含其他关键字,暂时替换成其他字符串,如 茶叶 变成 {fcc734148321f5ad627b27585aa23958}
  35.   if(strpos($kwd, $subKwd) !== false) {
  36.    $tmpKwd = '{'.md5($subKwd).'}';
  37.    $kwd = str_replace($subKwd, $tmpKwd, $kwd);
  38.    $tmpKwds[$tmpKwd] = $subKwd;
  39.   }
  40. }
  41. //把文字替换成链接
  42. $str = preg_replace('/('.$row[0].')/sui', '<a href="'.$row[1].'">'.$kwd.'</a>', $str, 5);  // 最多替换5次
  43. }

  44. //把代替子关键字的字符串替换回来
  45. foreach($tmpKwds as $tmp=>$kwd) {
  46. $str = str_replace($tmp, $kwd, $str);
  47. }
  48. echo $str;
  49. ?>
复制代码



以上程序输出:

这儿是<a href="111.htm">茶叶</a>的链接。<br />
这儿是<a href="222.htm">中国茶叶大观</a>的链接。<br />

这儿是<a href="111.htm">茶叶</a>的现有链接。<br />
这儿是<a href="222.htm">中国茶叶大观</a>的现有链接。<br />




上一篇:DISCUZ X 常用DIY标签说明
下一篇:SEO仿地宝网URL伪静态版块目录化和贴子目录化
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 05:40

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表