混合编码的文本段落重排
http://www.sgcha.cn/cha.php在文本处理中,尤其是大段的文本处理,由于html语言的规则以及文本编码的不同,使得文字容易出现乱码。同时由于换行的不同,使得文本要经常进行段落重排。段
http://www.sgcha.cn/cha.php
在文本处理中,尤其是大段的文本处理,由于html语言的规则以及文本编码的不同,使得文字容易出现乱码。同时由于换行的不同,使得文本要经常进行段落重排。
段落重排的标识主要是根据特定的标点符号来进行。具体参考代码中的注释
在文本处理中,尤其是大段的文本处理,由于html语言的规则以及文本编码的不同,使得文字容易出现乱码。同时由于换行的不同,使得文本要经常进行段落重排。
段落重排的标识主要是根据特定的标点符号来进行。具体参考代码中的注释
$strtest = '这个是第一个
句子,
的第一部分。
的反对法 的飞洒?
\u3434,
';
$strtest =cut_str_by_mb ($strtest );
echo "<pre>";
echo $strtest;
/*********************************************************************
输入一个字串
此处的关键是段落的标点,是一个utf-8的编码
返回排版后的字串。
*********************************************************************/
function cut_str_by_mb ($str,$arr_tag=NULL){
if($arr_tag==NULL){
$arr_tag=array(
'\u2026',
'\u201d',
'\u302',
'\uff1f',
':',
'\uff1a',
);
}
$str=set_char_set($str);//不管先检查字符格式,转化成utf-8的再说
$str=unescape($str);//把里面16进制编码的转化成utf-8的格式
$tmp_array=preg_split("/((\r(?!\n))|((?<!\r)\n)|(\r\n))/", $str);//根据换行符拆分成数组
$tmp_val='';
foreach($tmp_array as $v){
if(!empty($tmp_val)){
$v=trim($v);//去掉字符的首尾空格
}
$tmp_val=$tmp_val.$v;//链接后面的值,组成新的字串
$len=mb_strlen( $tmp_val, 'utf-8') ;
$endtag=mb_substr($tmp_val,$len-1,1,'utf-8');
$u_tag=unicode_encode($endtag);
if (in_array($u_tag, $arr_tag)) {
$return_arr[]=$tmp_val;
$tmp_val='';
}
}
$return_str=implode("\r\n",$return_arr);
return $return_str;
}
/****************************************************************
检查编码,统一用utf-8
**********************************************************************/
function set_char_set($data){
if( !empty($data) ){
$fileType = mb_detect_encoding($data , array('UTF-8','GBK','LATIN1','BIG5')) ;
if( $fileType != 'UTF-8'){
$data = mb_convert_encoding($data ,'utf-8' , $fileType);
}
}
return $data;
}
/****************************************************************
把其中的&# 以及joson格式转化成中文
**********************************************************************/
function unescape($str) {
$str = rawurldecode($str);
preg_match_all("/(?:%u.{4})|&#x.{4};|&#\d+;|.+/U",$str,$r);
$ar = $r[0];
// print_r($ar);
foreach($ar as $k=>$v) {
if(substr($v,0,2) == "%u"){
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,-4)));
}
elseif(substr($v,0,3) == "&#x"){
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,3,-1)));
}
elseif(substr($v,0,2) == "&#") {
$ar[$k] = iconv("UCS-2BE","UTF-8",pack("n",substr($v,2,-1)));
}
}
return join("",$ar);
}
/****************************************************************
把utf-8编码的字符返回 unicode的字串
**********************************************************************/
function unicode_encode($name){
$name = iconv('UTF-8', 'UCS-2', $name);
$len = strlen($name);
$str = '';
for ($i = 0; $i < $len - 1; $i = $i + 2){
$c = $name[$i];
$c2 = $name[$i + 1];
if (ord($c) > 0){
// 两个字节的文字
$str .= '\u'.base_convert(ord($c), 10, 16).base_convert(ord($c2), 10, 16);
}else{
$str .= $c2;
}
}
return $str;
}
精彩图集
精彩文章






