Heim > php教程 > php手册 > 混合编码的文本段落重排

混合编码的文本段落重排

WBOY
Freigeben: 2016-06-06 19:34:36
Original
1069 Leute haben es durchsucht

http://www.sgcha.cn/cha.php 在文本处理中,尤其是大段的文本处理,由于html语言的规则以及文本编码的不同,使得文字容易出现乱码。同时由于换行的不同,使得文本要经常进行段落重排。 段落重排的标识主要是根据特定的标点符号来进行。具体参考代码中的注释

http://www.sgcha.cn/cha.php
在文本处理中,尤其是大段的文本处理,由于html语言的规则以及文本编码的不同,使得文字容易出现乱码。同时由于换行的不同,使得文本要经常进行段落重排。
段落重排的标识主要是根据特定的标点符号来进行。具体参考代码中的注释
$strtest = '这个是第一个
句子,
的第一部分。
的反对法 的飞洒?
\u3434,
';
$strtest =cut_str_by_mb ($strtest );

echo "<pre class="brush:php;toolbar:false">";
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;
}
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage