帝国CMS如何禁止内容关键字替换ALT和A标签中的关键词?

2020-10-25 16:16:09   
 

  问题的提出:

  1、关键字替换如何避免IMG标签里的ALT字段被替换

  2、在内容中,偶尔链接中含有关键字,如何避免这个关键字被替换

  分析问题:

  帝国cms的关键字替换功能,后台控制在:系统参数设置- 信息设置

blob.png

  重复替换次数为单个关键字在某一篇文章中的替换次数。设置为0,不限制。

  函数代码,则实在在e/class/functions.php中,关键部分为:

  if(STR_IREPLACE){$newstext=empty($public_r[repkeynum])?str_ireplace($r[keyname],''.$r[keyname].'',$newstext):preg_replace('/'.$r[keyname].'/i',''.$r[keyname].'',$newstext,$public_r[repkeynum]);}else{$newstext=empty($public_r[repkeynum])?str_replace($r[keyname],''.$r[keyname].'',$newstext):preg_replace('/'.$r[keyname].'/i',''.$r[keyname].'',$newstext,$public_r[repkeynum]);

  可见$public_r[repkeynum]就表示替换次数,为0或空的时候,使用str_replace函数,一股脑替换;不为空的时候,使用preg_replace函数进行有次数限制的正则替换。

  需要排除两种情况。假定关键字为“你好”。

  关键字在<...>中:比如

这图不错你好我也好

, 比如

  关键字不在<...>中,但是属于在链接中,比如:中药方大全,你好你真的很好!

  情形一对应的正则为: 你好[^<]*>,所以我们构造“?!([^<]*>)”排除。

  性情二对应的正则为: 你好[^<]*< a="">,所以我们构造“?!([^<]*< a="">)”排除。

  合并后为  (?!([^<]*>)|([^<]*< a="">))。

  解决方案:

  上述文件中对应的函数位置,修改正则即可。记住有两个地方。

  修改前的正则为:'/'.$r[keyname].'/i'

  修改后为:'/'.$r[keyname].'(?!([^<]*>)|([^<]*< a="">))/i'

  【补记】因为编辑器过滤,您看到的上述正则表达式有误,以图片为准

111.jpg

本站文章均为九脑科技摘自权威资料,书籍,或网络原创文章,如有版权纠纷或者违规问题,请即刻联系我们删除,我们欢迎您分享,引用和转载,我们谢绝直接复制和抄袭!感谢...
我们猜你喜欢