帝国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;
}
人家就保留空格。
所以 ,你应该会修改了吧? 显示的时候,还有问题,参照下图:
|