`

网站unicode字符乱码问题一扫空解决方案 -- 带demo 简单的小说应用

阅读更多
看小说: 40行程序写成的
http://iamsese.cn/view/xiaoshuo
自己实现的PHP UNICODE 解析和反解析类
网上找到的都是 PHP到什么GBK GB2312的,但是对于 日文 俄文等等就不行了,
我做的这个代码 'iamsese.unicode.php'  终于解决了这些问题,哈哈哈
你查看源代码 看到 页面标题处
$title = IAMSESE_UNICODE::encode("{小说应用 -- начина }  ");
$title .= IAMSESE_UNICODE::deUnicode($title);
 
写道
<?php
require_once 'woshisese.unicode.php' ;

$title = woshisese_UNICODE::encode("{小说应用 -- начина } ");
$title .= woshisese_UNICODE::deUnicode($title);
if (file_exists('./woshisese/yes.txt')) {
if ($_REQUEST['index'] != '' && is_numeric($_REQUEST['index']) && ($_REQUEST['index'] >= 1)){
$current = $_REQUEST['index'] ;
}
else
$current = $_REQUEST['index'] = 1 ;
$file = "./woshisese/ehan{$current}.txt" ;
$content = file_get_contents($file);
$array = explode("\n",$content);
//去除最后一个空字符
$array = array_slice($array,0,count($array)-1);
$content = '' ;
foreach($array as $e){
$e = woshisese_UNICODE::encode($e);
$content .= "<p>{$e}</p>";
}
}
else {
$woshisesesource = './ehan.txt' ; //
$f = fopen($woshisesesource,'r');
$filecount = 1 ;
//if ($f) die('not sourve');
while (!feof($f)) {
$str = '' ;
for ($i=0;$i<100;$i++) {
$buffer = fgets($f, 10240);
$str .= $buffer ;
}
//die($str);
//每个文件存100行
file_put_contents("./woshisese/ehan{$filecount}.txt",$str);
$filecount ++ ;
}
file_put_contents("./woshisese/yes.txt","yes");
fclose($f);
$content = "数据建立完成,请刷新当前页显示";
}

?>
<html>
<head>
<title><?php echo $title ; ?></title>
</head>
<body>
<div id='container'>
<?php echo $content ; ?>

</div>
<div>
<a href='index.php?index=<?php echo ($current-1) ;?>'>上一页</a>
<a href='index.php?index=<?php echo (1) ;?>'>第一页</a>
<a href='index.php?index=<?php echo ($current+1) ;?>'>下一页</a>
</div>

</body>
</html>
<style>
html,body {
height: 100%;
margin: 0 0 ;background-color: gray;
text-align: center ;
}
#container {
height: 80%;width: 800px;
margin: 30px auto ;
background-color: #ffc;
overflow: auto ;

}

#container p {
text-indent: 2em ;
text-align: left ;

}

</style>
<script>

</script>

 

 

 

这里顺带着就解决,前后端ajax unicode编码的问题一起全部解决吧

<?php
/**
 * 时间: 2009-4-9 17:19:55
 * iamsese.cn 我是色色 
 * vb2005xu.iteye.com
 * 
 * Unicode 编码和转换功能库
 */
//class B {
//	static  $name = "序列化操作--方法返回" ;
//	function getB(){
//		return B::$name ;
//	}
//	var $bname  = "序列化操作--方法返回" ;
//	function getC(){
//		return $this->bname ;
//	}
//}
class IAMSESE_UNICODE {
	
//	function getB(){
//		return B::getB();
//	}
//	function getC(){
//		return new B() ;
//	}
//	
	/**
	 * ord 方法的unicode 支持
	 *
	 * @param 单字 $c
	 * @return int
	 */
	function uniord($c) {
	    $h = ord($c{0});
	    if ($h <= 0x7F) {
	        return $h;
	    } else if ($h < 0xC2) {
	        return false;
	    } else if ($h <= 0xDF) {
	        return ($h & 0x1F) << 6 | (ord($c{1}) & 0x3F);
	    } else if ($h <= 0xEF) {
	        return ($h & 0x0F) << 12 | (ord($c{1}) & 0x3F) << 6
	                                 | (ord($c{2}) & 0x3F);
	    } else if ($h <= 0xF4) {
	        return ($h & 0x0F) << 18 | (ord($c{1}) & 0x3F) << 12
	                                 | (ord($c{2}) & 0x3F) << 6
	                                 | (ord($c{3}) & 0x3F);
	    } else {
	        return false;
	    }
	}
	
	/**
	 * 将指定编码的字符串分解成数组
	 *
	 * @param STRING $string
	 * @param STRING $encode
	 * @return ARRAY
	 */
	function mbStringToArray ($string,$encode="UTF-8") {
	    $strlen = mb_strlen($string);
	    while ($strlen) {
	        $array[] = mb_substr($string,0,1,$encode);
	        $string = mb_substr($string,1,$strlen,$encode);
	        $strlen = mb_strlen($string);
	    }
	    return $array;
	}
	
		
	/**
	 * 仅支持PHP5 -- 同上,是icov实现
	 */
//	function iconvStringToArray ($string,$encode="UTF-8") {
//	    $strlen = iconv_strlen($string,$encode);
//	    while ($strlen) {
//	        $array[] = iconv_substr($string,0,1,$encode);
//	        $string = iconv_substr($string,1,$strlen,$encode);
//	        $strlen = iconv_strlen($string,$encode);
//	    }
//	    return $array;
//	}
	
	/**
	 * Unicode 编码表示
	 *
	 * @param 单字 $unichar
	 * @return String
	 */
	function unicharCodeAt($unichar){
		return "&#" . IAMSESE_UNICODE::uniord($unichar) . ';' ;
	}
	
	/**
	 * chr 函数的unicode实现
	 *
	 * @param mixed[整形数组或者整数] $codes
	 * @return String
	 */
	function uchr ($codes) {
	    if (is_scalar($codes)) 
	    	$codes= func_get_args();
	    $str= '';
	    foreach ($codes as $code) 
	    	$str.= html_entity_decode('&#'.$code.';',ENT_NOQUOTES,'UTF-8');
	    return $str;
	}
	
	/*
	 * 同上 基于mb实现
	 */
//	function unichr($codes) {
//		if (is_scalar($codes)) 
//	    	$codes= func_get_args();
//	    $str= '';
//	    foreach ($codes as $code) 
//	    	$str.= mb_convert_encoding('&#' . intval($u) . ';', 'UTF-8', 'HTML-ENTITIES');	    	
//		return $str;
//	}
	
	/**
	 * 将unicode编码的字符串解析成正常的数据
	 *
	 * @param String $str
	 * @return String
	 */
	function deUnicode($str){
		$arr = explode (';',str_ireplace('&#','',$str) );
		//去除最后一个空字符
		$arr = array_slice($arr,0,count($arr)-1);
		return IAMSESE_UNICODE::uchr($arr);
	}
	
	/**
	 * 将字符串解析成unicode编码的字符串
	 *
	 * @param String $str
	 * @return String
	 */
	function encode($str){
		$arr = IAMSESE_UNICODE::mbStringToArray($str);
		$str = '' ;
		foreach($arr as $a){
			$str .=  IAMSESE_UNICODE::unicharCodeAt($a) ;
		}
		return $str ;
	}
	
	/**
	 * 输出Unicode字符表
	 *
	 */
	function echoUnicodeTable(){
		for ($i=0;$i<4096;$i++){
			echo '<br/>' . dechex($i). ' **********  ';
			for ($j=0;$j<16;$j++){
				$ch = intval($i * 16 + $j);
				$ch = IAMSESE_UNICODE::uchr($ch);
				echo $ch . '   --   ';
			}
		}
	}
	
	/**
	 * 输出Ascii字符表
	 *
	 */
	function echoAsciiTable(){
		
		for($i=0;$i<16;$i++){
			echo '<br/>' . ($i). ' **********  ';
			for ($j=0;$j<16;$j++){
				$num = intval($i * 16 + $j);
				$ch = IAMSESE_UNICODE::uchr($num);
				echo "{$ch} --- ";
			}
		}
	}
	
	function test(){
		$test1 ='我是色色[iamsese.cn] начинается уже в марте bbs.cn #$%^&*()_+!@QADD?><.,,m';
		$test1 = IAMSESE_UNICODE::encode($test1);
		echo $test1 ;
		echo "\n<br/>\n";
		$test1 = IAMSESE_UNICODE::deUnicode($test1);
		echo $test1 ;		
	}
	
}

//IAMSESE_UNICODE::test();
//IAMSESE_UNICODE::echoUnicodeTable();
//IAMSESE_UNICODE::echoAsciiTable();
?>

 

 

 

前端js代码

jQuery.iamsese = {

	version : '过客阵营 -- 我是色色 !',

	// ++++++++Unicode 编码转换++++++++ //
	toUnicode : function(s) {
		var ctpl = '&#{c};'
		var len = s.length;
		var rs = "";
		for (var i = 0; i < len; i++)
			rs += ctpl.replace('{c}', s.charCodeAt(i));
		return rs;
	},
	deUnicode : function(s) {
		/**
		 * 直接用str.replace("apples","oranges") 只会替换第一个匹配的 使用 /g 替换所有匹配的字符, /i
		 * 忽略大小写
		 */
		var k = s.replace(/&#/gi, "").split(";");
		var rs = "";
		for (i = 0; i < k.length; i++)
			rs += String.fromCharCode(k[i]);
		return rs;
	}

 

2
0
分享到:
评论

相关推荐

    IOS应用源码Demo-Unicode源碼-毕设学习.zip

    8. **示例代码分析**:压缩包中的"应用"文件可能包含了处理Unicode字符的具体代码示例,通过学习这部分代码,学生可以了解如何在iOS应用中正确处理Unicode,解决实际开发中的相关问题。 9. **毕业设计应用**:对于...

    Unicode串口通信Demo

    **Unicode串口通信Demo**是基于编程技术的一个项目示例,主要关注的是如何在不同的编程环境中,如**VC2010**和**VC6**,实现Unicode编码的串口通信功能。Unicode是一种广泛使用的字符编码标准,它包含了世界上几乎...

    解决PD4ML导出pdf中文乱码问题

    5. **调试和日志记录**:在解决问题的过程中,使用日志记录工具记录PD4ML的输出信息,可以帮助定位问题所在。例如,查看PD4ML是否成功加载了指定的字体,或者编码设置是否被正确应用。 在提供的“test”文件中,...

    AndroidThings中文乱码解决Demo

    本文将深入探讨如何在Android Things环境中解决中文乱码的问题,以及提供的Demo的具体实现。 首先,我们要理解Android Things与传统Android系统在处理字符编码上的差异。Android Things基于Android框架,但为了适应...

    JFreeChart参考Demo和技术文档以及相关问题的处理和乱码问题

    本篇将深入探讨JFreeChart的参考Demo、技术文档,以及如何解决在使用过程中可能遇到的乱码问题。 首先,**JFreeChart参考Demo**是学习和理解JFreeChart功能的绝佳资源。Demo中包含了各种类型的图表示例,展示了如何...

    android jni 中文字符传递demo

    3. **C/C++端**:使用适当的库函数(如`std::wstring_convert`或手动转换)将字节转换为宽字符(如`wchar_t`),以处理Unicode字符。 4. **JNI接口**:将处理后的宽字符转换回字节数组,再通过`env-&gt;...

    c++ 与c#的中文字符串传递演示demo

    - 确保C++和C#之间的字符编码一致,否则可能会出现乱码问题。 - 理解C++的名称修饰规则,正确声明和导出C++函数。 - 在C#中使用`DllImport`时,提供正确的DLL名和函数原型,包括参数类型、顺序和调用约定。 - ...

    TMS-Component-Pack-8.0.0.0 AdvMemo 中文支持修正..

    这种转换通常是为了解决在非Unicode环境下的中文字符处理问题,因为ansistring和ansichar通常与系统默认的代码页相关联,可以在某些情况下更好地处理特定的非Unicode字符集,如GBK。然而,这种方法并不总是完美的...

    vfp9 显示和输出 unicode 文本(bug fixed) demo

    这可能包括字符乱码、显示不全或输出错误等常见问题。然而,由于描述中还提到了“一些未解决的问题”,这意味着尽管已经有改进,但仍有待进一步优化,鼓励对VFP感兴趣的开发者参与其中,进行代码调试和增强。 ...

    delphi 实现截取字符串中中文+英文混合截取

    总结来说,处理Delphi中的中文和英文混合字符串截取,关键在于理解Unicode字符串的特性,正确选择和使用字符串截取函数,并在必要时进行字节对齐和编码转换。通过这样的方式,我们可以确保在处理多语言文本时不会...

    VB6环境纯Win32 API函数写窗口,VB6使用Unicode版API函数Demo

    "VB6使用Unicode版API函数Demo"部分强调了使用Unicode字符集的API函数。Unicode是一种包含几乎世界上所有字符的编码标准,确保了跨语言和跨平台的文本处理能力。在VB6中,默认使用的是ANSI字符集,但为了支持多语言...

    alipaySDK支付开发Demo

    UTF-8是一种广泛使用的Unicode字符编码,可以处理世界上大部分语言的字符,而GBK是中国大陆常用的汉字编码,包含大量中文字符。开发者在集成支付宝SDK时,需确保正确设置编码,以防止因字符集不匹配导致的数据乱码...

    JFreeChart Demo

    这个“JFreeChart Demo”是基于版本1.0.17的一个示例,它展示了如何使用JFreeChart库来创建图表,并特别解决了中文乱码的问题。 在“StackedBarChartDemo1”中,我们能看到如何生成堆叠条形图。堆叠条形图是一种...

    asp与.net通信编码乱码问题

    总的来说,解决编码乱码问题的关键在于理解字符编码的概念,正确配置和处理编码,以及在不同组件间保持一致性。对于开发者来说,掌握这些技巧不仅能解决眼前的问题,还能提升对跨平台、跨语言编程的理解,从而提高...

    table-export(excel、word等中文无乱码)多版本合集

    "table-export(excel、word等中文无乱码)多版本合集"是一个专门处理表格导出至Excel、Word等格式的工具包,旨在确保在处理中文字符时不会出现乱码问题。这个合集包含了不同版本的table-export实现,以适应各种开发...

    Zbar(iPhone)修复识别中文乱码列子(包含静态库)

    在iOS开发中,二维码识别是一项常见的功能,ZBar是一个广泛使用的开源库,它允许开发者集成二维码扫描和解码能力到他们的应用中。然而,当处理中文字符时,ZBar可能会出现乱码问题,这主要是由于编码不兼容或者解码...

    Emoji_Web_Demo

    6. **后端处理**:在服务器端,可能需要考虑如何存储和检索带有Emoji的数据,例如,使用UTF-8编码存储,避免数据传输过程中的乱码问题。 7. **响应式设计**:考虑到移动设备的屏幕尺寸差异,可能需要调整Emoji的...

    Demo.EncodeConvert.Tool.rar_DEMO_EncodeConvert_文档编码

    总的来说,“Demo.EncodeConvert.Tool”是一个实用的文档编码转换工具,对于处理多语言环境下的文本数据,或是解决编码不兼容问题具有很大的帮助。正确理解和使用文档编码,是确保信息准确传递的关键,也是IT从业者...

    java web处理 emoji demo

    由于Emoji是Unicode字符集的一部分,它们在不同的操作系统和浏览器中可能有不同的表示方式,这可能导致在存储、传输或者显示时出现问题。本示例"java web处理 emoji demo"将探讨如何在Java Web应用中正确地处理这些...

    IO流的demo

    而处理文本文件时,字符流能够更好地处理Unicode编码问题,避免乱码问题。 在IO流操作中,我们还需要了解一些关键概念: - **管道流(Piping Stream)**:允许流之间的连接,使得一个流的输出可以作为另一个流的...

Global site tag (gtag.js) - Google Analytics