只能是编码转换了。。写一个函数,把utf8转成gbk的就可以了
/*
*UTF-8转简体
*/
function utf82gb($gb){ /* Program writen by sadly modified by agun */
if(!trim($gb))
return $gb;
$filename=IDIR."include/gb-unicode.table";
$tmp=file($filename);
$codetable=array();
while(list($key,$value)=each($tmp))
$codetable[hexdec(substr($value,7,6))]=substr($value,0,6);;
$out = "";
$len = strlen($gb);
$i = 0;
while($i < $len) {
$c = ord( substr( $gb, $i++, 1 ) );
switch($c >> 4)
{
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
// 0xxxxxxx
$out .= substr( $gb, $i-1, 1 );
break;
case 12: case 13:
// 110x xxxx 10xx xxxx
$char2 = ord( substr( $gb, $i++, 1 ) );
$char3 = $codetable[(($c & 0x1F) << 6) | ($char2 & 0x3F)];
$out .= _hex2bin( dechex( $char3 + 0x8080 ) );
break;
case 14:
// 1110 xxxx 10xx xxxx 10xx xxxx
$char2 = ord( substr( $gb, $i++, 1 ) );
$char3 = ord( substr( $gb, $i++, 1 ) );
$char4 = $codetable[(($c & 0x0F) << 12) | (($char2 & 0x3F) << 6) | (($char3 & 0x3F) << 0)];
$out .= _hex2bin( dechex ( $char4 + 0x8080 ) );
break;
}
}
return $out;
}function _hex2bin( $hexdata )
{
for ( $i=0; $i<strlen($hexdata); $i+=2 )
$bindata.=chr(hexdec(substr($hexdata,$i,2)));return $bindata;
}
/*
*UTF-8转简体
*/
function utf82gb($gb){ /* Program writen by sadly modified by agun */
if(!trim($gb))
return $gb;
$filename=IDIR."include/gb-unicode.table";
$tmp=file($filename);
$codetable=array();
while(list($key,$value)=each($tmp))
$codetable[hexdec(substr($value,7,6))]=substr($value,0,6);;
$out = "";
$len = strlen($gb);
$i = 0;
while($i < $len) {
$c = ord( substr( $gb, $i++, 1 ) );
switch($c >> 4)
{
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
// 0xxxxxxx
$out .= substr( $gb, $i-1, 1 );
break;
case 12: case 13:
// 110x xxxx 10xx xxxx
$char2 = ord( substr( $gb, $i++, 1 ) );
$char3 = $codetable[(($c & 0x1F) << 6) | ($char2 & 0x3F)];
$out .= _hex2bin( dechex( $char3 + 0x8080 ) );
break;
case 14:
// 1110 xxxx 10xx xxxx 10xx xxxx
$char2 = ord( substr( $gb, $i++, 1 ) );
$char3 = ord( substr( $gb, $i++, 1 ) );
$char4 = $codetable[(($c & 0x0F) << 12) | (($char2 & 0x3F) << 6) | (($char3 & 0x3F) << 0)];
$out .= _hex2bin( dechex ( $char4 + 0x8080 ) );
break;
}
}
return $out;
}function _hex2bin( $hexdata )
{
for ( $i=0; $i<strlen($hexdata); $i+=2 )
$bindata.=chr(hexdec(substr($hexdata,$i,2)));return $bindata;
}
1.页面转成 utf-8
2.数据库转成 gbk页面使用 gbk ,数据库用utf-8 根本就没用
即使你存了其他语言在数据库,页面一样显示不了所以如果你不需要多国语言支援,将数据库转成 gbk 是最简单的方法
你的我试过了不行的2楼 ;phpwind就用这种方式的,可我怎么就做不成啊?
这个和
mysql_query("SET names 'GBK'");区别大吗?
就相当于
mysql_query("SET @@character_set_connection=GBK,@@character_set_results=GBK,@@character_set_client=GBK"); 那三小项都为GBK,,,有区别的A
character_set_connection=GBK和
character_set_connection=utf8
有区别吗?
页面跟数据库不统一编码根本就没有好处
而为了应付其所产生的问题去做iconv及mb_convert_encoding这些处理
只会为伺服器增加巨大及没有必要的负担将数据库转换一下编码只需要几简单的步骤就可以完成
为什么不做?
转换编码,使用mb_convert_encoding函数,那个iconv有很多都转换不了,但是比较占内存,速度比较慢。
你的建议很好,但对我而言是有行不通的,空间数据库是服务商的,不是我想转就可以转的,还是帮我想歪主意更有用一点吧!
搞懂了PHPwind就我的问题就没有了。
这个set names试过了,无效!mb_convert_encoding,iconv貌似都不是PHP的库函数,要另加载DLL模块的,权限在空间服务商手中,,我只能望洋兴叹了...
我也Google和百度了很多资料,,,但也不是很清楚,哪位高手能帮我分析出PHPwind是怎么做到的,就相当OK了!
话说回来,我是个新手,先谢谢大家的帮助!
phpmyadmin本身就可以完成
我从未见过一个服务商会不能改的,免费空间都可以做网站连数据库都不能控制那还能做什么 =_=
这个的解决方法:set names 这种方法绝对不行。首先,楼主应该有建立库的权限吧(create database ,如果这个都没有,哎,换服务提供商吧)建立库时,指定编码:
CREATE DATABASE example_db_name DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;这样就行了。
我也不多说了。你把你的数据库内容贴出来,我写段代码给你。用类似下面的语句来获取数据库内容:select hex(contents) from your_table limit 1;hex是一个mysql函数,contents是你的字段名。
告诉数据库客户端使用的是GBK编码.
我的数据库就是这样的权限!
$lnk = mysql_connect('localhost', 'root', '')
or die ('Not connected : ' . mysql_error());// make foo the current db
mysql_select_db('database', $lnk) or die ('Can\'t use ' . mysql_error());
mysql_query("set names 'gbk'");
$query = "SELECT * FROM sourceinfo limit 0,1";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)){
echo $row["title"];
}
?>
就加这一句就解决问题了,何必搞得哪么复杂.前提是,数据库的数据都是通过程序录入取出.
昨天怎么老set name都不成功啊!!!
是不是require_once了一个文件造成的??
昨天怎么老set names都不成功啊!!!
是不是require_once了一个文件造成的??