帝国7.5的“TAG名称”英文时单词之间的空格,提交后总会自动删掉,导致TAG名称连在一起了,想保留空格,如何处理修改,让保留空格。比如:City Map 提交后会变成CityMap。
解决思路一:调用taganme的时候,用下边的正则处理下,最大限度的还原英文名称。
<?php
$string="MapCityLBver";
$string=preg_replace('~(?<=[a-z])([A-Z])~', " $0", $string);
echo $string; // Map City LBver
?>
解决思路二:修改帝国cms的源代码
打开帝国cms二开助手,查找特征码
insert into {$dbtbpre}enewstags
这是插入tags表的操作。添加tags一定会执行这种语句,所以可以用来做特征。
容易看有两个文件包含这个特征:
件路径 |
操作 |
特征代码 |
/e/class/functions.php |
|
//添加修改信息增加tags |
/e/admin/tags/ListTags.php |
|
//帝国后台单独添加tags |
阅读源代码,容易发现,帝国cms对tagname用RepPostVar做了过滤。
//参数处理函数 function RepPostVar($val){ if($val!=addslashes($val)) { exit(); } CkPostStrChar($val); $val=str_replace("%","",$val); $val=str_replace(" ","",$val); $val=str_replace("`","",$val); $val=str_replace("t","",$val); $val=str_replace("%20","",$val); $val=str_replace("%27","",$val); $val=str_replace("*","",$val); $val=str_replace("'","",$val); $val=str_replace(""","",$val); $val=str_replace("/","",$val); $val=str_replace(";","",$val); $val=str_replace("#","",$val); $val=str_replace("--","",$val); $val=RepPostStr($val,1); $val=addslashes($val); //FireWall FWClearGetText($val); return $val; }
哎呀,草率了。空格被干掉了。
往下看,这个函数还有个弟弟:
//参数处理函数2 function RepPostVar2($val){ if($val!=addslashes($val)) { exit(); } CkPostStrChar($val); $val=str_replace("%","",$val); $val=str_replace("`","",$val); $val=str_replace("t","",$val); $val=str_replace("%20","",$val); $val=str_replace("%27","",$val); $val=str_replace("*","",$val); $val=str_replace("'","",$val); $val=str_replace(""","",$val); $val=str_replace("/","",$val); $val=str_replace(";","",$val); $val=str_replace("#","",$val); $val=str_replace("--","",$val); $val=RepPostStr($val,1); $val=addslashes($val); //FireWall FWClearGetText($val); return $val; }
人家就保留空格。
所以 ,你应该会修改了吧? 显示的时候,还有问题,参照下图: