phpcms V9 内联/关联链接 字符串较长链接无法正确替换的问题完美解决
来源:互联网 发布:如何看待马蓉 知乎 编辑:程序博客网 时间:2024/05/01 21:43
http://www.taisha.org/index.php?m=content&siteid=1&a=show&catid=27&id=45104
样板地址
修改phpcms扩展函数文件库,/phpcms/libs/functions/extention.func.php新增函数cmp
function cmp($a,$b){
if(is_array($a)||is_array($b)){ if ($a[0] == $b[0]){return 0;}else{return ((strlen($a[0]))<(strlen($b[0]))) ? 1 : -1;} }else{ if ($a == $b){return 0;}else{return ((strlen($a))<(strlen($b))) ? 1 : -1;} }}修改文件为/phpcms/modules/content/fields/editor/output.inc.php
修改方法为_keylinks()
修改代码如下
function _keylinks($txt, $replacenum = '',$link_mode = 1) {$search = "/(alt\s*=\s*|title\s*=\s*)[\"|\'](.+?)[\"|\']/is";$txt = preg_replace_callback($search, array($this, '_base64_encode'), $txt);$keywords = $this->data['keywords'];if($keywords) $keywords = strpos(',',$keywords) === false ? explode(' ',$keywords) : explode(',',$keywords);if($link_mode && !empty($keywords)) {foreach($keywords as $keyword) {$linkdatas[] = $keyword;}} else {$linkdatas = getcache('keylink','commons');}if($linkdatas) {usort($linkdatas , "cmp");$word = $replacement = array();foreach($linkdatas as $k=>$v) {if($link_mode && $keywords) {$word1[] = '/(?!(<a.*?))' . preg_quote($v, '/') . '(?!.*<\/a>)/s';$word2[] = $v;$midd1[] = "@$k@"; $midd2[] = "/@$k@/";$replacement[] = '<a href="javascript:;" onclick="show_ajax(this)" class="keylink">'.$v.'</a>';} else {$word1[] = '/(?!(<a.*?))' . preg_quote($v[0], '/') . '(?!.*<\/a>)/s';$word2[] = $v[0];$midd1[] = "@$k@"; $midd2[] = "@$k@";$replacement[] = '<a href="'.$v[1].'" target="_blank" class="keylink">'.$v[0].'</a>';}}if($replacenum != '') { $txt = preg_replace($word1, $midd1, $txt, $replacenum);$txt = preg_replace($midd2, $replacement, $txt, $replacenum);} else { $txt = str_replace($word2, $midd1, $txt);$txt = str_replace($midd2, $replacement, $txt);}}$txt = preg_replace_callback($search, array($this, '_base64_decode'), $txt);return $txt;}
其次循环关键词组时增加 foreach($linkdatas as $k=>$v) 增加$k最为正则替换中间变量
最后 增加中间变量 modd1 modd2 分两次替换关键词语
在代码中 理论上只需要排序即可,不需要使用中间变量进行处理,但是为了必变避免内联嵌套,所以使用了中间变量完全避免关键词的相关性
如上,解决
0 0
- phpcms V9 内联/关联链接 字符串较长链接无法正确替换的问题完美解决
- 【phpcms-v9】phpcms-v9中的标签链接到搜索页
- phpcms v9 外部链接在新窗口打开
- 完美解决libvpx链接时候错误的问题
- 完美解决wordpress邮件链接无效的问题
- [完美解决Dede关键字交叉(重叠)替换问题]dede5.6 关键词自动添加链接
- 解决PhpCms V9后台无法上传图片
- PHPCMS 链接数据库乱码问题
- 干货分享:PHPCMS V9 删除链接URL中的域名
- 解决eVC无法与虚拟机链接的问题
- 解决Linux动态链接库的无法加载问题
- phpcms v9 成功安装后无法登陆后台问题与解决
- 解决终端无法ssh链接服务器问题
- 解决一些问题的链接
- 解决链接ClickableSpan中点击后与ListView中item的长按冲突的问题
- phpcms v9 内容页调用当前栏目名称及链接/上级栏目名称及链接方法
- phpcms v9整合discuz X2.5的正确方法
- 完美解决XP无法定位程序输入点RegGetValue于动态链接库ADVAPI32.dll,XP,win7注册表读取问题
- Decode Ways
- 三种方式使用vlan (by quqi99)
- JAVA 输出日历
- ionic应用在mac上使用Xcode7.2(7C68)进行iphone真机测试
- max_join_size报错
- phpcms V9 内联/关联链接 字符串较长链接无法正确替换的问题完美解决
- iOS开发数据库篇—SQLite常用的函数
- iOS对图像进行尺寸压缩
- 集群节点临时重启
- Material Design学习(一)
- Spark 机器学习 —— 从决策树到随机森林
- vector::reserve && vector::resize
- UDP协议
- AndroidStudio