混合编码的文本段落重排
程序员文章站
2022-06-14 21:25:38
...
http://www.sgcha.cn/cha.php 在文本处理中,尤其是大段的文本处理,由于html语言的规则以及文本编码的不同,使得文字容易出现乱码。同时由于换行的不同,使得文本要经常进行段落重排。 段落重排的标识主要是根据特定的标点符号来进行。具体参考代码中的注释
http://www.sgcha.cn/cha.php
在文本处理中,尤其是大段的文本处理,由于html语言的规则以及文本编码的不同,使得文字容易出现乱码。同时由于换行的不同,使得文本要经常进行段落重排。
段落重排的标识主要是根据特定的标点符号来进行。具体参考代码中的注释
$strtest = '这个是第一个 句子, 的第一部分。 的反对法 的飞洒? \u3434, '; $strtest =cut_str_by_mb ($strtest ); echo ""; 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))|((?$v) { if(substr($v,0,2) == "%u"){ $ar[$k] = iconv("UCS-2BE","UTF-8",pack("H4",substr($v,-4))); } elseif(substr($v,0,3) == ""){ $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 0){ // 两个字节的文字 $str .= '\u'.base_convert(ord($c), 10, 16).base_convert(ord($c2), 10, 16); }else{ $str .= $c2; } } return $str; }