帝国cms6.6
批量替换字段值,可是总是没有成功。以下为在帝国论坛查到的相关帖子笔记:
1. 改用sql语句
update phome_ecms_news set newstext=REPLACE(newstext,'原字符','新字符')
2.替换无效的情况
(1)形式如:/desktx/d/file 批量修改成:/d/file
(2)被替换字符里含有特殊字符“/”,猜测用“////”来代表“/”进行转义。
(3)被替换字符串为:52卡-我们52自己的点卡商城已经建成.<A href="www.52ka.com" target=_blank target=_blank>www.52ka.com</A> 希望大家多多支持<BR
(4)<a href="http://www.shengshi.com/" target="_blank">
(5)有人说,原字符和新字符都要加单引号。
(6)有这种情况,帝国后台编辑器里显示的内容,同数据库里显示的不同。这个问题解决,到数据库里看看究竟是怎么显示的就好办了。
(7)原: d/file/ad/78XX 改后:d/file/ad/78-78 失败!
(8) 批量替换字段值时候不能替换TITLE中的字符"0",显示 传递参数错误~
(9)我要把文章模型中的内容包含“【文章整理by<a class="channel_keylink" href="http://qq.com" target="_blank">QQ空间</a>qq.com】“替换成空白字段,各种办法都是试过了。失败!
(10)当 原字符 是数字 0 的时候,就会出现传递参数有误,这是怎么回事?
(11)选择替换表(*):新闻系统,操作栏目:所有栏目,替换字段(*): smalltext,替换内容:<br /> 替换成 ,提交,之前newstext替换成功的。现在简介就是替换不了。出现换行。搜索结果十分难看。
(12)原字符<p> </p> 新字符不设置
个人总结了一下,替换失败大概有这样三个原因:
1.替换成功了,但是没有重新生成页面,误以为没有成功。刷新一下页面就好了。
2.字串在数据库里存储格式和后台编辑器里显示的不同。这个也好办。找到字符串在数据库的真面目,就可以成功替换了。
3.字符串里含有特殊字符,需要转义。但是帝国cms没有给出说明,而且管理员似乎也懒的说明。
实战笔记:
2014年10月18日23点10分了。抽支烟。看来问题就是处在引号身上。如何转义呢?
在mysq中,双引号用来转义 。试:"2" 失败!
提交 "2",发现传递到给函数DoRepNewstext($start,$oldword,$newword,$field,$classid,$tid,$tbname,$over,$dozz,$dotxt,$logininid,$loginin);中的值是--- "2"。
该函数位置为 /e/class/comdofun.php中。
分析代码后,确认是帝国cms的bug,大概在380行左右,这样修改:
// $repoldword=addslashes($oldword); 这个是错的
$repoldword=addslashes($postoldword);
// $repnewword=addslashes($newword); 这个是错的
$repnewword=addslashes($postnewword);
呵呵。这下所有的问题迎刃而解。19日凌晨了。晚安。
|