简繁体的问题,欢迎大家都来讨论 请参考本隐士的站点http://www.wuguan.com,看看里面有没有你要的功能 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 <? //////////////////////////////////////////////作者: 网络骑士 ////联系方式:[email protected] ////所用技术:php ////完成时间:2002-05-12 /////////////////////////////////////////////function isbig5($code) { if (strlen($code)>=2) { $code=strtok($code,""); if (ord($code[0]) < 161) { return (0); } else { if (((ord($code[1]) >= 64)&&(ord($code[1]) <= 126))||((ord($code[1]) >= 161)&&(ord($code[1]) <= 254))) { return (1); } else { return (0); } } } else { return (0); } } function big5offset($code) { if (strlen($code) >= 2) { $code=strtok($code,""); if ((ord($code[1]) >= 64)&&(ord($code[1]) <= 126)) { return ((ord($code[0]) - 161) * 157 + (ord($code[1]) - 64)); } if ((ord($code[1]) >= 161)&&(ord($code[1]) <= 254)) { return ((ord($code[0]) - 161) * 157 + 63 + (ord($code[1]) - 161)); } } return (-1); } function wordtostring($code) { return (chr(hexdec(substr($code,0,2))).chr(hexdec(substr($code,2,2)))); } function big5togb($code) { include "data_big5.php"; $output=""; $length=strlen($code); $code=strtok($code,""); $idx=0; while ($idx < $length) { $tmpStr=$code[$idx].$code[$idx+1]; if (isbig5($tmpStr)) { $offset=big5offset($tmpStr); if (($offset >= 0)||($offset <= 14757)) { $output.=wordtostring($big5order[$offset]); $idx++; } else { $output.= $code[$idx]; } } else { $output.= $code[$idx]; } $idx++; } return ($output); } ?> 我们学校的网站和香港的一个交换数据库,遇到了类似的问题,上面是我写的一个函数。写的时候是参考了函数手册完成的,function big5togb($code) 是主函数。浅妄薄见,望与斟酌 这个程序的原理是什么?能解释一下吗?另外有个php的程序可以实现gb big5互换,不知对这个有没有用。需要我贴出来。 to _Shakespeare(网络骑士): 这个转换函数我有用C写过,你的代码也看到过.谢谢. 不过, 我想问,是不是网页用了gb2312的,在繁体平台输入的数据都给作了内码转换? 但好象还是有没有转换成功的(用问号表示.),这种问题如何解决?to pcdreama(峰幻) : 就麻烦你也贴出来吧.谢谢. 不能贴,我放在一个服务器上,去下载吧。http://www.eccreation.com/big_gb.zip Oct Dec Hex Char Oct Dec Hex Char -------------------------------------------------------------------------------- 000 0 00 NUL '\0' 100 64 40 @ 001 1 01 SOH 101 65 41 A 002 2 02 STX 102 66 42 B 003 3 03 ETX 103 67 43 C 004 4 04 EOT 104 68 44 D 005 5 05 ENQ 105 69 45 E 006 6 06 ACK 106 70 46 F 007 7 07 BEL '\a' 107 71 47 G 010 8 08 BS '\b' 110 72 48 H 011 9 09 HT '\t' 111 73 49 I 012 10 0A LF '\n' 112 74 4A J 013 11 0B VT '\v' 113 75 4B K 014 12 0C FF '\f' 114 76 4C L 015 13 0D CR '\r' 115 77 4D M 016 14 0E SO 116 78 4E N 017 15 0F SI 117 79 4F O 020 16 10 DLE 120 80 50 P 021 17 11 DC1 121 81 51 Q 022 18 12 DC2 122 82 52 R 023 19 13 DC3 123 83 53 S 024 20 14 DC4 124 84 54 T 025 21 15 NAK 125 85 55 U 026 22 16 SYN 126 86 56 V 027 23 17 ETB 127 87 57 W 030 24 18 CAN 130 88 58 X 031 25 19 EM 131 89 59 Y 032 26 1A SUB 132 90 5A Z 033 27 1B ESC 133 91 5B [ 034 28 1C FS 134 92 5C \ '\\' 035 29 1D GS 135 93 5D ] 036 30 1E RS 136 94 5E ^ 037 31 1F US 137 95 5F _ 040 32 20 SPACE 140 96 60 ` 041 33 21 ! 141 97 61 a 042 34 22 " 142 98 62 b 043 35 23 # 143 99 63 c 044 36 24 $ 144 100 64 d 045 37 25 % 145 101 65 e 046 38 26 & 146 102 66 f 047 39 27 ' 147 103 67 g 050 40 28 ( 150 104 68 h 051 41 29 ) 151 105 69 i 052 42 2A * 152 106 6A j 053 43 2B + 153 107 6B k 054 44 2C , 154 108 6C l 055 45 2D - 155 109 6D m 056 46 2E . 156 110 6E n 057 47 2F / 157 111 6F o 060 48 30 0 160 112 70 p 061 49 31 1 161 113 71 q 062 50 32 2 162 114 72 r 063 51 33 3 163 115 73 s 064 52 34 4 164 116 74 t 065 53 35 5 165 117 75 u 066 54 36 6 166 118 76 v 067 55 37 7 167 119 77 w 070 56 38 8 170 120 78 x 071 57 39 9 171 121 79 y 072 58 3A : 172 122 7A z 073 59 3B ; 173 123 7B { 074 60 3C < 174 124 7C | 075 61 3D = 175 125 7D } 076 62 3E > 176 126 7E ~ 077 63 3F ? 177 127 7F DEL 说明Oct Dec Hex Char 分别表示8进制,10 ,16和字符ASCII编码为7位有效码,而非ASCII的如汉字则采用双字节表达一个汉字,通过字节最高位b7置1来实现。许多8位码(比如 ISO 8859-1, Linux 的默认字符集)容纳 ASCII 作为它们的下半部分.所以在写的时候必须参考iso_8859_1to jyc_nj(老蔣) :问号的问题,我想把,函数中的判断的标准64改成63(?)应该可以吧 to _Shakespeare(网络骑士): 不好意思. 我可能还要问,是不是网页用了gb2312的,在繁体平台输入的数据都给作了内码转换? 用问号表示的地方,是不是因为找不到对应的gb2312(毕竟big5字库比gb2312大),不可显字符都一概用?表示. 因为如果我把网页改成charset=big5,先前的数据完全是乱码了.to zaowei21(水里的乌鸦): 愿闻其详. to jyc_nj(老蔣) 我做的时候没有遇到过有”问号“的问题。不过你的猜测很有可能,继续研究…… http://www.csdn.net/expert/topic/587/587647.xml?temp=.6069757看看 to _Shakespeare(网络骑士): 以前这些页面用的是charset=big5, 繁体自不用说, 简体下也是很正常.而且确实是big5里有很多字转换不到对应的简体字. to _Shakespeare(网络骑士)你的程序是不是从以前的www.oso.com.cn那里弄来的?原作者就是我啊,我以前在oso叫caocao,那段程序执行效率不佳,我早就优化过了,不过提交给oso,他们不采纳,后来oso倒闭了。 帮忙转化一个数组 图片服务器分离的问题? 求高手解答? 关于UChome的一个问题 一个简单的问题大家,帮忙看看 关于数组函数 获取地址栏地址 大哥哥门帮帮我吧有关RSS采集问题 讨论SQLite内置函数的使用 求救!linux下php的安装问题(在线等待!一定给分!) 有一个很大的问题啊 怎会如此?给个理由先! php 的安全问题
////////////////////////////////////////////
//作者: 网络骑士 //
//联系方式:[email protected] //
//所用技术:php //
//完成时间:2002-05-12 //
///////////////////////////////////////////
function isbig5($code)
{
if (strlen($code)>=2)
{
$code=strtok($code,""); if (ord($code[0]) < 161)
{
return (0);
}
else
{
if (((ord($code[1]) >= 64)&&(ord($code[1]) <= 126))||((ord($code[1]) >= 161)&&(ord($code[1]) <= 254)))
{
return (1);
}
else
{
return (0);
}
}
}
else
{
return (0);
}
} function big5offset($code)
{
if (strlen($code) >= 2)
{
$code=strtok($code,"");
if ((ord($code[1]) >= 64)&&(ord($code[1]) <= 126))
{
return ((ord($code[0]) - 161) * 157 + (ord($code[1]) - 64));
}
if ((ord($code[1]) >= 161)&&(ord($code[1]) <= 254))
{
return ((ord($code[0]) - 161) * 157 + 63 + (ord($code[1]) - 161));
}
}
return (-1);
} function wordtostring($code)
{
return (chr(hexdec(substr($code,0,2))).chr(hexdec(substr($code,2,2))));
} function big5togb($code)
{
include "data_big5.php";
$output="";
$length=strlen($code);
$code=strtok($code,"");
$idx=0;
while ($idx < $length)
{
$tmpStr=$code[$idx].$code[$idx+1]; if (isbig5($tmpStr))
{
$offset=big5offset($tmpStr);
if (($offset >= 0)||($offset <= 14757))
{
$output.=wordtostring($big5order[$offset]);
$idx++;
}
else
{
$output.= $code[$idx];
}
}
else
{
$output.= $code[$idx];
}
$idx++;
}
return ($output);
}
?> 我们学校的网站和香港的一个交换数据库,遇到了类似的问题,上面是我写的一个函数。写的时候是参考了函数手册完成的,function big5togb($code) 是主函数。
浅妄薄见,望与斟酌
需要我贴出来。
这个转换函数我有用C写过,你的代码也看到过.谢谢.
不过, 我想问,是不是网页用了gb2312的,在繁体平台输入的数据都给作了内码转换? 但好象还是有没有转换成功的(用问号表示.),这种问题如何解决?
to pcdreama(峰幻) :
就麻烦你也贴出来吧.谢谢.
http://www.eccreation.com/big_gb.zip
--------------------------------------------------------------------------------
000 0 00 NUL '\0' 100 64 40 @
001 1 01 SOH 101 65 41 A
002 2 02 STX 102 66 42 B
003 3 03 ETX 103 67 43 C
004 4 04 EOT 104 68 44 D
005 5 05 ENQ 105 69 45 E
006 6 06 ACK 106 70 46 F
007 7 07 BEL '\a' 107 71 47 G
010 8 08 BS '\b' 110 72 48 H
011 9 09 HT '\t' 111 73 49 I
012 10 0A LF '\n' 112 74 4A J
013 11 0B VT '\v' 113 75 4B K
014 12 0C FF '\f' 114 76 4C L
015 13 0D CR '\r' 115 77 4D M
016 14 0E SO 116 78 4E N
017 15 0F SI 117 79 4F O
020 16 10 DLE 120 80 50 P
021 17 11 DC1 121 81 51 Q
022 18 12 DC2 122 82 52 R
023 19 13 DC3 123 83 53 S
024 20 14 DC4 124 84 54 T
025 21 15 NAK 125 85 55 U
026 22 16 SYN 126 86 56 V
027 23 17 ETB 127 87 57 W
030 24 18 CAN 130 88 58 X
031 25 19 EM 131 89 59 Y
032 26 1A SUB 132 90 5A Z
033 27 1B ESC 133 91 5B [
034 28 1C FS 134 92 5C \ '\\'
035 29 1D GS 135 93 5D ]
036 30 1E RS 136 94 5E ^
037 31 1F US 137 95 5F _
040 32 20 SPACE 140 96 60 `
041 33 21 ! 141 97 61 a
042 34 22 " 142 98 62 b
043 35 23 # 143 99 63 c
044 36 24 $ 144 100 64 d
045 37 25 % 145 101 65 e
046 38 26 & 146 102 66 f
047 39 27 ' 147 103 67 g
050 40 28 ( 150 104 68 h
051 41 29 ) 151 105 69 i
052 42 2A * 152 106 6A j
053 43 2B + 153 107 6B k
054 44 2C , 154 108 6C l
055 45 2D - 155 109 6D m
056 46 2E . 156 110 6E n
057 47 2F / 157 111 6F o
060 48 30 0 160 112 70 p
061 49 31 1 161 113 71 q
062 50 32 2 162 114 72 r
063 51 33 3 163 115 73 s
064 52 34 4 164 116 74 t
065 53 35 5 165 117 75 u
066 54 36 6 166 118 76 v
067 55 37 7 167 119 77 w
070 56 38 8 170 120 78 x
071 57 39 9 171 121 79 y
072 58 3A : 172 122 7A z
073 59 3B ; 173 123 7B {
074 60 3C < 174 124 7C |
075 61 3D = 175 125 7D }
076 62 3E > 176 126 7E ~
077 63 3F ? 177 127 7F DEL
说明Oct Dec Hex Char 分别表示8进制,10 ,16和字符ASCII编码为7位有效码,而非ASCII的如汉字则采用双字节表达一个汉字,通过字节最高位b7置1来实现。许多8位码(比如 ISO 8859-1, Linux 的默认字符集)容纳 ASCII 作为它们的下半部分.
所以在写的时候必须参考iso_8859_1to jyc_nj(老蔣) :
问号的问题,我想把,函数中的判断的标准64改成63(?)应该可以吧
不好意思. 我可能还要问,是不是网页用了gb2312的,在繁体平台输入的数据都给作了内码转换?
用问号表示的地方,是不是因为找不到对应的gb2312(毕竟big5字库比gb2312大),不可显字符都一概用?表示.
因为如果我把网页改成charset=big5,先前的数据完全是乱码了.to zaowei21(水里的乌鸦):
愿闻其详.
我做的时候没有遇到过有”问号“的问题。不过你的猜测很有可能,继续研究……
以前这些页面用的是charset=big5, 繁体自不用说, 简体下也是很正常.而且确实是big5里有很多字转换不到对应的简体字.
你的程序是不是从以前的www.oso.com.cn那里弄来的?
原作者就是我啊,我以前在oso叫caocao,那段程序执行效率不佳,我早就优化过了,不过提交给oso,他们不采纳,后来oso倒闭了。