上次写过一篇博客用phpcms2008表单向导 实现一个简单问答的效果,就是用建立两个表单 一个提问表单 一个回答表单,然后就可以直接用get标签调用相关字段。基本满足要求,不过之前好像没遇到过一个问题,就是回复字段 一般 我们会设置成编辑器,目的是让编辑在后台能 将文字弄得专业好看点。在其他页面调用的时候 出现将编辑器里的html语言也调用出来的情况。开始思路是有 就是自己写个函数将html过滤掉。试了好几个方法都不行,后来得到一同事的提醒,用html_entity_decode() 这个函数 将实体先转换成字符 然后再过滤。哈哈,最后成功了!include/global.func.php 里是phpcms2008的全局函数库,里面可以新加你自定义的函数,这个太强大~~
- function str_cut_b($string, $length, $dot = '...')
- {
- $string=html_entity_decode($string,ENT_QUOTES,GB2312); //将实体转换为字符
- $string=strip_tags($string); //去除html符号
- $strlen = strlen($string);
- if($strlen <= $length) return $string;
- $string = str_replace(array(' ', '&', '"', ''', '“',
- '”', '—', '<', '>', '·', '…'), array(' ', '&', '"', "'", '"', '"', '—', '<', '>',
- '·', '…'), $string);
- $strcut = '';
- if(strtolower(CHARSET) == 'utf-8')
- {
- $n = $tn = $noc = 0;
- while($n < $strlen)
- {
- $t = ord($string[$n]);
- if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
- $tn = 1; $n++; $noc++;
- } elseif(194 <= $t && $t <= 223) {
- $tn = 2; $n += 2; $noc += 2;
- } elseif(224 <= $t && $t < 239) {
- $tn = 3; $n += 3; $noc += 2;
- } elseif(240 <= $t && $t <= 247) {
- $tn = 4; $n += 4; $noc += 2;
- } elseif(248 <= $t && $t <= 251) {
- $tn = 5; $n += 5; $noc += 2;
- } elseif($t == 252 || $t == 253) {
- $tn = 6; $n += 6; $noc += 2;
- } else {
- $n++;
- }
- if($noc >= $length) break;
- }
- if($noc > $length) $n -= $tn;
- $strcut = substr($string, 0, $n);
- }
- else
- {
- $dotlen = strlen($dot);
- $maxi = $length - $dotlen - 1;
- for($i = 0; $i < $maxi; $i++)
- {
- $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] :
- $string[$i];
- }
- }
- $strcut = str_replace(array('&', '"', "'", '<', '>'), array('&', '"', ''',
- '<', '>'), $strcut);
- return $strcut.$dot;
- }