PHP模块化编辑器编码/解码函数 我使用<!-- -->将文本进行了包裹,把整段文本直接输出到前端,再由JS进行解码。 这样既不影响文章被搜索引擎收录,又可以缓解服务器压力。 PHP后端编码解码函数: <?php function text_encode($arr){ $txt=''; $last=null; foreach($arr as $row){ if(empty($row['type'])){ if(!is_null($last)){if(empty($last)){$txt.='<!--';}$txt.='-->';} $txt.=trim($row['value']); } else{ if(empty($last)){$txt.='<!--'.$row['type'].':';} elseif($row['type']==$last){$txt.=',';} else{$txt.='.'.$row['type'].':';} $txt.=$row['value']; } $last=$row['type']; } if(!empty($last)){$txt.='-->';} return $txt; } function text_decode($txt){ $arr=array(); foreach(preg_split('/(<.*?>)/',$txt,null,PREG_SPLIT_DELIM_CAPTURE) as $row){ if(stripos($row,'<')===0){ foreach(explode('.',trim($row,'<>!-')) as $val){ if($val!=''){$spl=explode(':',$val);if(isset($spl['1'])){foreach(explode(',',$spl['1']) as $itm){$arr[]=array('type'=>$spl['0'],'value'=>$itm);}}} } } else{ $row=trim($row);if($row!=''){$arr[]=array('type'=>0,'value'=>$row);} } } return $arr; } $arr=array('0'=>array('type'=>0,'value'=>'这是一段,:?.日记的开始。'),'1'=>array('type'=>1,'value'=>'3'),'2'=>array('type'=>2,'value'=>'454765'),'3'=>array('type'=>2,'value'=>'654758'),'4'=>array('type'=>0,'value'=>'这是一段日记,:?.的中间。'),'5'=>array('type'=>3,'value'=>'454765'),'6'=>array('type'=>0,'value'=>'这是一段日记的末尾。!--'),'7'=>array('type'=>0,'value'=>'这是一段日记的末尾。!--')); $txt='这是一段,:?.日记的开始。<!--1:3.2:454765,654758-->这是一段日记,:?.的中间。<!--3:454765-->这是一段日记的末尾。!--<!---->这是一段日记的末尾。!--'; //print_r(text_encode($arr));die; //print_r(text_decode($txt));die; ?> JS前端解码函数: <script> function text_decode(txt){ var arr=[]; txt.split(/(<.*?>)/).forEach(function(row){ if(row.indexOf('<')===0){ row.replace(/\<|\>|\!|\-/g,'').split('.').forEach(function(val){ if(val!=''){var spl=val.split(':');if(spl[1]){spl[1].split(',').forEach(function(itm){arr.push({'type':parseInt(spl[0]),'value':itm});});};}; }); } else{ row=row.trim();if(row!=''){arr.push({'type':0,'value':row});}; }; }); return arr; }; </script>