100分求字符判断~~~~~~~~~~~ 你可以试着看看汉字的ORD是多少啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 for ($i=0; $i<$length; $i++){ if (ord(substr($text, $i))>0xE0) { $UGB = "utf-8"; break; } elseif (ord(substr($text, $i,1))>0x81) { $UGB = "简体"; break; } elseif (ord(substr($text, $i, 1))>0xA1) { $UGB = "HZ"; break; }}这样子可以么?我这里没环境,没有测试。 是不是你顺序写错了?for ($i=0; $i<$length; $i++){ if (ord(substr($text, $i))>0xE0) { $UGB = "utf-8"; break; } elseif (ord(substr($text, $i))>0x80) { //a $UGB = "HZ"; break; } elseif (ord(substr($text, $i))>0xA1) { //b $UGB = "HZ"; break; }}上面这段程序如果substr($text, $i) = 0xA2的话,那么将在a处结束循环,所以这历史一个问题吧,尝试换一下顺序,看看结果如何?for ($i=0; $i<$length; $i++){ if (ord(substr($text, $i))>0xE0) { $UGB = "utf-8"; break; } elseif (ord(substr($text, $i))>0xA1) { $UGB = "HZ"; break; } elseif (ord(substr($text, $i))>0x80) { $UGB = "HZ"; break; }} 你对编码完全不了解,这是个完全错误的程序$text="柚";试试 汉字“桀”内码是E8EE你用GulimChe字体(韩文字体)是“姚”你用MS Gothic字体(日文字体)是“韶”你用MingLiu字体(Big5字体)是“鴅”呵呵,怎能从text的内容分出语言呢?windows目录下面有个“GBK.txt”,有空自己用不同的字体研究下你还会发现泰文、德文、法文的内码都…… 单纯的用程序来解决问题是很难的,甚至可能做不到的就算是Iconv也要你告诉它是什么字符集,也不能自己判断我这个是笨的方法,不过是可以解决问题的,并且不影响速度function strUGB($strtext, $strurl, $strcome){ $UGB = ""; $length = strlen($strtext); for ($i=0; $i<$length; $i++) { if (ord(substr($strtext, $i))>0xE0) //先判断UTF-8,UTF-8的是三个字节,GB2312,BIG5是两个字节,可以分离 { $UGB = "utf-8"; break; } elseif (ord(substr($strtext, $i))>0xA1) //汉字 { $UGB = "HZ"; break; } elseif (ord(substr($strtext, $i))>0x80) //汉字 { $UGB = "HZ"; break; } //不满足的就不是多字节汉字,一般就是英文数字和符号,或者其他的,我这边就是要汉字,所以其他就无所谓 } if ($UGB == "utf-8") //我的网站是UTF-8,所以就不用转码了,直接添加 { keywords_come_add(htmlspecialchars(trim($strtext)), $strurl, $strcome, 1); } elseif ($UGB == "HZ") //非UTF-8汉字要一般就是GB2312,BIG5,要判断 { require_once("./encoding/chinese.php"); require_once("./encoding/class.Chinese.php");//这个是一个汉字转码的类,网上很多,可以下载 $strgb = trim(gb2utf($strtext)); //先假设GB2312转UTF-8 $strbig = trim(big2utf($strtext)); //先假设BIG5转UTF-8 $strutf2gb = trim(utf2gb($strgb)); //再将UTF-8转回GB2312 $strutf2big = trim(utf2big($strbig)); //再将UTF-8转回BIG5 if (urlencode($strtext) == ereg_replace("%00", "", urlencode($strutf2gb))) //比较GB2312转回的是否一致,一致就是GB2312 { keywords_come_add(htmlspecialchars($strgb), $strurl, $strcome, 1); } elseif (urlencode($strtext) == ereg_replace("%00", "", urlencode($strutf2big))) //比较BIG5转回的是否一致,一致就是BIG5 { keywords_come_add(htmlspecialchars($strbig), $strurl, $strcome, 1); } else { keywords_come_add(htmlspecialchars(trim($strtext)), $strurl, $strcome, 0); //否则就是乱码,因为即使是用Iconv也会有部分字转不了UTF-8,是??,所以就是乱码,定义一个$STR = 0 为乱码,其余都是正常的为1,可以直接调用 } } else { keywords_come_add(htmlspecialchars(trim($strtext)), $strurl, $strcome, 1); //英文数字和符号,或者其他的,就直接添加 }}总结:先不管是GB2312还是BIG5都分别用GB2312和BIG5的转码一下,然后再将其转回比较,比较用urlencode转为URL格式比较好,因为我的这个转码的好象会加空格,并且还不是一般的空格,urlencode后就是%00,所以要过滤掉,然后比较,因为转码类的缺陷,部分字转成了??所以就有乱码,在数据库标识一下,以后可以手工处理,这个用于添加来路搜索引擎的关键字添加是有用的在我目前的水平,只能用这个方法来做了如果那个高手有更加好的方法,告诉我,我感激不尽http://www.gooot.com/我的网站,大家互相交流,我也是刚从ASP转过来的。请高手有时间过去看看,指点一二,也可以黑,但是黑完后,要告诉我是什么问题,我好解决问题,不要破坏就可以了 1、utf-8是三个字节的,不错吧,那么就是可以和gb2312,big5分离2、一般中文的程序,我们只是要识别gb2312,big5,utf-8,其中utf-8是系统默认的,所以不要可逆,其实逆操作只有两个字符集,并且一般来路的关键字都不是很长的,所以基本也谈不上什么效率问题,如果是很长的话自然就要取部分3、如果有不可识别就在数据库注明即可,以后可以手工识别4、唠叨好像你是这里的老大,你能关注很好,希望大家可以一起解决这个问题 如何采集防采集的网站 正则表达式提取表格tr行 php上传图片访问权限的问题 求一个投票管理系统 mysql_real_escape_string()问题? 请问PHP如何解析存储在mysql中text属性字段中的xml 应聘PHP程式设计 PHP写的网站,其他人机子可以浏览,为什么我的不行? 救人要紧!谢谢!! 看看错在哪? 100分求交友站点的源代码! 为什么论坛在某些页面会出现乱码
{
if (ord(substr($text, $i))>0xE0) {
$UGB = "utf-8";
break;
} elseif (ord(substr($text, $i,1))>0x81) {
$UGB = "简体";
break;
} elseif (ord(substr($text, $i, 1))>0xA1) {
$UGB = "HZ";
break;
}
}这样子可以么?我这里没环境,没有测试。
{
if (ord(substr($text, $i))>0xE0) {
$UGB = "utf-8";
break;
} elseif (ord(substr($text, $i))>0x80) { //a
$UGB = "HZ";
break;
} elseif (ord(substr($text, $i))>0xA1) { //b
$UGB = "HZ";
break;
}
}上面这段程序如果substr($text, $i) = 0xA2的话,那么将在a处结束循环,所以这历史一个问题吧,尝试换一下顺序,看看结果如何?for ($i=0; $i<$length; $i++)
{
if (ord(substr($text, $i))>0xE0) {
$UGB = "utf-8";
break;
} elseif (ord(substr($text, $i))>0xA1) {
$UGB = "HZ";
break;
} elseif (ord(substr($text, $i))>0x80) {
$UGB = "HZ";
break;
}
}
试试
你用GulimChe字体(韩文字体)是“姚”
你用MS Gothic字体(日文字体)是“韶”
你用MingLiu字体(Big5字体)是“鴅”呵呵,怎能从text的内容分出语言呢?
windows目录下面有个“GBK.txt”,有空自己用不同的字体研究下
你还会发现泰文、德文、法文的内码都……
{
$UGB = "";
$length = strlen($strtext);
for ($i=0; $i<$length; $i++)
{
if (ord(substr($strtext, $i))>0xE0) //先判断UTF-8,UTF-8的是三个字节,GB2312,BIG5是两个字节,可以分离
{
$UGB = "utf-8";
break;
}
elseif (ord(substr($strtext, $i))>0xA1) //汉字
{
$UGB = "HZ";
break;
}
elseif (ord(substr($strtext, $i))>0x80) //汉字
{
$UGB = "HZ";
break;
} //不满足的就不是多字节汉字,一般就是英文数字和符号,或者其他的,我这边就是要汉字,所以其他就无所谓
} if ($UGB == "utf-8") //我的网站是UTF-8,所以就不用转码了,直接添加
{
keywords_come_add(htmlspecialchars(trim($strtext)), $strurl, $strcome, 1);
}
elseif ($UGB == "HZ") //非UTF-8汉字要一般就是GB2312,BIG5,要判断
{
require_once("./encoding/chinese.php");
require_once("./encoding/class.Chinese.php");//这个是一个汉字转码的类,网上很多,可以下载
$strgb = trim(gb2utf($strtext)); //先假设GB2312转UTF-8
$strbig = trim(big2utf($strtext)); //先假设BIG5转UTF-8
$strutf2gb = trim(utf2gb($strgb)); //再将UTF-8转回GB2312
$strutf2big = trim(utf2big($strbig)); //再将UTF-8转回BIG5
if (urlencode($strtext) == ereg_replace("%00", "", urlencode($strutf2gb))) //比较GB2312转回的是否一致,一致就是GB2312
{
keywords_come_add(htmlspecialchars($strgb), $strurl, $strcome, 1);
}
elseif (urlencode($strtext) == ereg_replace("%00", "", urlencode($strutf2big))) //比较BIG5转回的是否一致,一致就是BIG5
{
keywords_come_add(htmlspecialchars($strbig), $strurl, $strcome, 1);
}
else
{
keywords_come_add(htmlspecialchars(trim($strtext)), $strurl, $strcome, 0); //否则就是乱码,因为即使是用Iconv也会有部分字转不了UTF-8,是??,所以就是乱码,定义一个$STR = 0 为乱码,其余都是正常的为1,可以直接调用
}
}
else
{
keywords_come_add(htmlspecialchars(trim($strtext)), $strurl, $strcome, 1); //英文数字和符号,或者其他的,就直接添加
}
}总结:先不管是GB2312还是BIG5都分别用GB2312和BIG5的转码一下,然后再将其转回比较,比较用urlencode转为URL格式比较好,因为我的这个转码的好象会加空格,并且还不是一般的空格,urlencode后就是%00,所以要过滤掉,然后比较,因为转码类的缺陷,部分字转成了??所以就有乱码,在数据库标识一下,以后可以手工处理,这个用于添加来路搜索引擎的关键字添加是有用的
在我目前的水平,只能用这个方法来做了如果那个高手有更加好的方法,告诉我,我感激不尽http://www.gooot.com/我的网站,大家互相交流,我也是刚从ASP转过来的。请高手有时间过去看看,指点一二,也可以黑,但是黑完后,要告诉我是什么问题,我好解决问题,不要破坏就可以了