Archive for the ‘程序’ Category

mysql4.0下用phpmyadmin导出sql文件有乱码的问题

Tuesday, December 2nd, 2008

引子:因台湾两台网站服务器需要更换ISP,因此得导出mysql数据库,然后再导入到现服务器上来。

过程:

因是虚拟主机没有权限直接复制数据库,故登录原phpmyadmin管理界面后才能导出数据,可是保存下来的.sql文件在windows XP简体系统下打开出现了乱码,因为在新主机上导入不成功,出现错误提示。

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘http://www.ybfq.com’,0,’ybfq’,'Rossy’ at line1.

打开sql文件分析了一下,发现很多繁体字都会出现?号,然后后面一个’单引号就消失了。

GOOGLE了很久,也找了很多类似的问题,很多问题都是没有得到正确圆满的回答,而我也用了很多工具,测试了很多导入导出的方法,可是都不行,因为.sql已经是乱码了。

期间的一个测试,将整个数据库分割成几个数据表的SQL查询语句,其中有一个是正确的,显示的工工整整的繁体字,导入也是正常的,而sql文件编码可以是ANSI,也可以是UTF-8和Unicode,反正这个就是完全正确的。

看到一些达人说的,mysql4.0导出后将不进行编码转换,因为数据不会丢失,只是在导入的时候字符集或者编码出现了错误。因此,继续找原因,继续测试。

用了UltraEdit进行UTF-8转换Unicode 或者 ASCII什么,反正就是那里能够转换的都试过了,就是不行。没法,换了一个Mysql Query Browser测试,仍然无法正常导入。

看来一步步的测试都无法正常导入,最终的结果只能在后台重新输入了,这样的方法是最保险的,可是却是最麻烦的。

最后,重新测试了一下,分割sql数据表文件的那一步,发现在PHPMYADMIN里面导入时文件的字符集用latin1时是正常的,要是其它资料导入的时候却仍然出现错误,继续分析sql文件,编码仍然是下载保存时用的ANSI,转换成其它UTF-8就会出现错误,然后再分析每一行的INSERT语句,很多带单引号’的结束字符都出现了?号,不知道是什么原来造成的,我就在这些?号后面补充了一个单引号’,然后再通过PHPMYADMIN选择文件的字符集为latin1时导入,SQL语句是执行了,可是每个?号前面的字都是不正确的,包括数据表里的名称、描述等字段都是如此,可是,我没有再想到其它的解决办法了,只好在后台重新编辑了一下错误了字,被这些mysql导入导出搞晕了。

哪位高人看到有类似的经历或者解决方案务必与我联系,谢谢。我的邮箱:Rossy.cn@gmail.com

“禤”字引出的iconv函数和字符集问题

Friday, November 14th, 2008

今天遇到了非常奇怪的一件事,网站新闻发布系统里发布的一条新闻在显示的时候竟然没有显示完全,到这个“禤”字的时候HTML标签就自动结束跳到下一个标签去了。

看HTML源文件得知,这个“禤”字没有显示。进入后台管理系统编辑页面,却可以正常显示。

接下来,查源代码,得到数据库字符集是UTF8,显示页面是GB2312,所以用的是PHP的iconv函数将此内容转换为GB2312编码的字符,iconv(”UTF-8″,”GB2312″,$Content)),然后就测试“禤”字是不是属于GB2312编码,结果测试正常。由此可以得知是这个iconv函数出现了问题。

先看一下官方手册上有关ivonv这个函数的解释:

iconv

(PHP 4 >= 4.0.5, PHP 5)

iconv – Convert string to requested character encoding

Description

string iconv ( string in_charset, string out_charset, string str )

Performs a character set conversion on the string str from in_charset to out_charset. Returns the converted string or FALSE on failure.

If you append the string //TRANSLIT to out_charset transliteration is activated. This means that when a character can’t be represented in the target charset, it can be approximated through one or several similarly looking characters. If you append the string //IGNORE, characters that cannot be represented in the target charset are silently discarded. Otherwise, str is cut from the first illegal character.

经测试,iconv这个函数肯定没有问题的,出问题的应该就是这个字符的编码了。果然,测试了GB2312之后,将其换成GBK编码后结果显示就正常了。至于为什么,这个应该交给PHP开发小组吧!

至于标题上的这个“禤”是什么字,查了一下,拼音是:xuan。
以下再延升了解一下中文字符集吧:

现在的 PC 平台必须支持 GB18030,手机、MP3 一般只支持 GB2312。

GB2312

GB2312 码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集——基本集》,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。

GB2312 收录简化汉字及符号、字母、日文假名等共 7445 个图形字符,其中汉字占 6763 个。GB2312 规定“对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示”,习惯上称第一个字节为“高字节”,第二个字节为“低字节”。

GB2312 将代码表分为 94 个区,对应第一字节;每个区 94 个位,对应第二字节,两个字节的值分别为区号值和位号值加 32(2OH),因此也称为区位码。01-09 区为符号、数字区,16-87 区为汉字区,10-15 区、88-94 区是有待进一步标准化的空白区。GB2312 将收录的汉字分成两级:第一级是常用汉字计 3755 个,置于 16-55 区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字计 3008 个,置于 56-87 区,按部首/笔画顺序排列。故而GB2312最多能表示 6763 个汉字。

GB2312 的编码范围为 2121H-777EH,与 ASCII 有重叠,通行方法是将 GB 码两个字节的最高位置 1 以示区别。

GBK

GB2312 仅收汉字 6763 个,这大大少于现有汉字,随着时间推移及汉字文化的不断延伸推广,有些原来很少用的字,现在变成了常用字,例如:朱镕基的“镕”字,未收入 GB2312-80,现在大陆的报业出刊只得使用(金+容)、(金容)、(左金右容)等来表示,形式不一而同,这使得表示、存储、输入、处理都非常不方便,对于搜索引擎等软件的构造来说也不是好消息,而且这种表示没有统一标准。从我们对人民日报 98 年数据的处理过程中,得出这样的经验:回填外字最困难的就是如何得到这种表示方法的集合。

为了解决这些问题,以及配合 UNICODE 的实施,全国信息技术化技术委员会于1995年12月1日《汉字内码扩展规范》。GBK 向下与 GB2312 完全兼容,向上支持 ISO 10646 国际标准,在前者向后者过渡过程中起到的承上启下的作用。GBK 亦采用双字节表示,总体编码范围为 8140-FEFE 之间,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 XX7F 一条线。

GBK 共收入 21886 个汉字和图形符号,包括:

* GB2312 中的全部汉字、非汉字符号。
* BIG5 中的全部汉字。
* 与 ISO 10646 相应的国家标准 GB13000 中的其它 CJK 汉字,以上合计 20902 个汉字。
* 其它汉字、部首、符号,共计 984 个。

微软公司自 Windows 95 简体中文版开始支持GBK代码,但目前的多数搜索引擎都不能很好地支持 GBK 汉字。

GBK 编码区分三部分:

* 汉字区,包括:

  • GBK/2:OXBOA1-F7FE, 收录 GB2312 汉字 6763 个,按原序排列;
  • GBK/3:OX8140-AOFE,收录 CJK 汉字 6080 个;
  • GBK/4:OXAA40-FEAO,收录 CJK 汉字和增补的汉字 8160 个。

* 图形符号区,包括:

  • GBK/1:OXA1A1-A9FE,除 GB2312 的符号外,还增补了其它符号
  • GBK/5:OXA840-A9AO,扩除非汉字区。

* 用户自定义区:

  • 即 GBK 区域中的空白区,用户可以自己定义字符。

GB18030

GB18030 是最新的汉字编码字符集国家标准, 向下兼容 GBK 和 GB2312 标准。 GB18030 编码是一二四字节变长编码。一字节部分从 0×0~0×7F 与 ASCII 编码兼容。 二字节部分, 首字节从 0×81~0xFE, 尾字节从 0×40~0×7E 以及 0×80~0xFE, 与 GBK 标准基本兼容。 四字节部分, 第一字节从 0×81~0xFE, 第二字节从 0×30~0×39, 第三和第四字节的范围和前两个字节分别相同。 四字节部分覆盖了从 0×0080 开始, 除去二字节部分已经覆盖的所有 Unicode 3.1 码位。也就是说, GB18030 编码在码位空间上做到了与 Unicode 标准一一对应,这一点与 UTF-8 编码类似。

目前最新的 glibc 2.2.x 系列已经全面支持了 GB18030 Locale 和 GB18030 与 UCS-4 之间的编码转换, 也就是说在系统层上 Linux 已经可以支持 GB18030 标准了。 下面问题的关键就是怎样让 XFree86 窗口系统也支持 GB18030 标准。

BIG5

BIG5 是通行于台湾、香港地区的一个繁体字编码方案。虽然存在一些瑕疵,但广泛应用于电脑行业,尤其是互联网中,从而成为一种事实上的行业标准。

1983年10月,台湾国家科学委员会、教育部国语推行委员会、中央标准局、行政院共同制定了《通用汉字标准交换码》,后经修订于1992年5月公布,更名为《中文标准交换码》,BIG5 是台湾资讯工业策进会根据以上标准制定的编码方案。

BIG5 码是双字节编码方案,其中第一个字节的值在 OXAO-OXFE 之间,第二个字节在 OX40-OX7E 和 OXA1-OXFE 之间。

BIG5 收录 13461 个汉字和符号,包括:

* 符号 408 个,编码位置 A140-A3BE
* 常用字 5401 个,编码位置 A440-C67E,包括台湾教育部颁布的《常用国字标准字体表》的全部汉字 4808 个,台湾教科书常用字 587 个,异体字 6 个。
* 次常用字 7652 个,编码位置 C940-F9D5,包括台湾教育部颁布的《次常用国字标准字体表》的全部汉字 6341 个,《罕用国字标准字体表》中使用频率较高的字 1311 个。

网页程序中刷新页面招数还真不少

Friday, June 20th, 2008

网页制作过程中,特别是编写网站程序时,通常都会遇到要刷新页面的,应该来说一般都是用如下几种方式解决的:
1、Javascript脚本程序:
刷新当前页面:
刷新指定页面:
指定多少秒自动跳转:

2、网页HTML元META元素:
指定多少秒自动跳转:

3、其它程序语言,如ASP、PHP、JSP等,无外乎都是输出以上两种方式(JAVASCRIPT或者HTML元)去实现跳转的功能的。例如:
ASP程序语言:Response.Write ("")
PHP程序语言:echo "";或者header("Location: url");

但,如果是PHP程序语言的话,还有一个HEADER函数可以更加方便的实现刷新当前页面或者跳转到指定页面,就是运用header("Refresh: 3 ;url=http://www.ybfq.com")这个语句,要注意的是,在Refresh和后面的冒号之间不能有空格。例子如下:

//test header function
//Rossy(Rossy.cn@gmail.com)
//2008-06-20 10:02

header("refresh: 3 "); //refresh current page

$n[0] = "Rossy";
$n[1] = "Wangqin";
$n[2] = "ybfqlyq";
$n[3] = "ango";
$n[4] = "cici";
$n[5] = "kenel";
$n[6] = "kathy";
$n[6] = "ybfq";

$i = rand() % 7;

echo " Welcome to my webpage ! ".$n[$i]." ! Thank you very much ! ";
?>

PHP生成JS文件给HTML静态页面调用

Wednesday, June 11th, 2008

由于美工做好了整站的静态页面,所以就想通过JS调用数据库里的数据。
假设MYSQL数据库创建成功,PHP连接MYSQL代码正常。
后台通过PHP程序生成JS代码如下:
$Str = "Nickname:Rossy(小强)
QQ:156760266
MSM:ybfqlyq@hotmail.com
E-mail:Rossy.cn@gmail.com"; //原始数据
$Str = str_replace("\r\n",'
',$Content); //替换换行符,如果不替换\r\n换行符在静态页面会出现脚本错误的:未结束的字符串常量。
$Str = "document.write(\"".$Str."\");"; //生成Javascript语法代码
$filename = "contact.js"; //JS文件名
$fp = fopen("$filename","w"); //打开并读取该JS文件
fwrite($fp,$Str); //写入内容
fclose($fp);

前台静态页面调用如下:
红色部分即为JS脚本调用代码,如果出现乱码则修改相应的Charset字符集。



Rossy is here waiting for you!

I Love Wangqin

www.ybfq.com 永不放弃网


鼠标移动/点击变换显示隐藏层

Friday, May 16th, 2008

现在网页流行的鼠标经过或者点击变换层显示不同内容的功能,现做了个例子收藏备用。
还有一个就是显示提示信息的功能,多少秒后提示信息自动消失,也就是显示隐藏隐藏层实现的。
代码如下:
//switch tabs in the website
//Rossy.cn@gmail.com
//2008-05-16 16:14

session_start;
if ($_GET['action']) {
$_SESSION['MsgText'] = "Login successfully"; //提示信息写入SESSION
}
function getMsg() {
if ($_SESSION['MsgText']) {
echo "

". $_SESSION["MsgText"] . "

";
echo "";
unset($_SESSION['MsgText']);
echo ""; //读取提示信息
}
}
getMsg();
?>