肥宅之家  ⁝︎  登录
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>
C
脑浆物语 霖博客 设计笔记 依萌萌 灰常记忆 乐亦人生 拔剑舞 云破天开 秋日 Yoooo 幻焕 归程 笨猫 云上萝莉
🍁 STATUS TOS