我们在生成内容时,有时需要将页面的编码转换为Unicode内码格式,也就是中文文字都变为《技术有限公司》这种样式,但帝国cms并没有提供这种功能。
实际这种格式为NCR格式,也就是Numeric character reference.
转换为这种编码格式,并不影响浏览器的正常解析,仍然可以转换为正确的文字,也并不影响搜索引擎收录(相反的,经过我们收集各方的经验,发现这种方式对收录也有部分帮助,特别是可以越过360安全浏览器的软件对于页面上不和谐的关键词的检测。但CMS大学小编尚未查证,姑且相信吧)
我们这里只讨论方法,由于php也没有提供类似的内置函数来直接输出,所以我们写了一段函数来处理这个问题,代码如下:
折叠PHP 代码
- function nochaoscode($str, $encode = "utf-8")
- {
- if (!function_exists("iconv") || !function_exists("mb_strlen")) {
- return $str;
- }
- $str = iconv($encode, "utf-16", $str);
- for ($i = 0; $i < mb_strlen($str); $i+=2) {
- $code = ord($str{$i}) * 256 + ord($str{$i + 1});
- if ($code < 128) {
- $output .= chr($code);
- } else if ($code != 65279) {
- $output .= "&#" . $code . ";";
- }
- }
- return $output;
- }
将上面的函数放在 /e/class/functions.php 文件最上方,作为第一个函数。因为我们是要修改帝国的文件生成部分,来实现生成文件时自动将文字输出位这种编码格式。接下来我们修改生成函数,这里涉及到内容页、栏目页、首页、自定义页面等等部分。
首先我们搜索
折叠XML/HTML 代码
- //内容页替换公共标记
将
折叠PHP 代码
- $temp=str_replace('[!--pagetitle--]','<?=$grpagetitle?>',$temp);
修改为:
折叠PHP 代码
- $temp=str_replace('[!--pagetitle--]','<?=nochaoscode($grpagetitle)?>',$temp);
然后我们搜索
折叠PHP 代码
- $indextext=RepBq($indextext);
修改为:
折叠PHP 代码
- $indextext=nochaoscode(RepBq($indextext));
ps:还有更多部分,这里我们不再一一叙述,总之,将该文件中涉及到文件生成的函数再输出内容时都用我们前边写的函数转换一下,写入文件后就大功告成了。这里我们直接附上附件供大家参考(适用于帝国cms7.2 UTF8版本,其他版本请参照前文的思路自行修改)。
修改后的文件生成效果: