delphi for php完全支持中文三部曲

胶河渔翁

胶河渔翁

2016-02-19 14:42

下面图老师小编要跟大家分享delphi for php完全支持中文三部曲,简单的过程中其实暗藏玄机,还是要细心学习,喜欢还请记得收藏哦!

  第一部曲:

  要使用delphi for php的update1版,之前的版本虽然也能达到页面内容显示中文的目标,但这不是完全的中文支持。

  有了delphi for php编程软件后,新增一个form页面,只要将form的encoding属性设为GB2312或utf-8,即可实现页面正常显示中文。

  第二部曲:

  本论坛及网上其他地方对控件的中文支持有不同描述,本人经过整理,其实现步骤是:1、修改apache2的配置文件,让其应用utf-8字符集(注意同时修改http.conf和httpd.template.conf文件,以免被delphi for php启动时复原);2、设置delphi for php,让其应用utf-8字符集,同时也让php应用utf-8字符集;3、修改PHP配置文件,让其应用utf-8字符集(同时修改php.ini和php.ini.template文件,原因同上),这部分的设置似乎在第2步已经完成了,当然用另一种方式设置一下也没关系啦。

  至此,在delphi for php中将form的encoding设为utf-8,即可完全实现控件的中文支持。

  到这一步后,数据库控件其实在代码层次已经支持中文了,但由于mysql数据库与php在字符集一致性等方面的原因,仍会显示乱码。

  第三部曲:

  MySQL 4以上的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  因此需要将mysql和PHP的默认字符集都设为utf-8,如此设置以后,我们会发现一个问题:用delphi for php生成的php程序提交的中文数据,用phpmyadmin查看是乱码,但用原提交程序查看却一切正常;另一方面,用phpmyadmin输入的中文数据,用delphi for php生成的php程序查看是乱码,但用phpmyadmin查看却正常。

  由此我们可以推断出:数据在传输及存储环节出现了字符集的不一致。

  问题就出在这个connection连接层上!一般情况下,PHP连接Mysql编码方式,如果没有显式的声明编码方式,都将使用latin1编码。一般的程序,都没有显式声明 ,所以,都是将utf8文本按latin1编码方式存在数据库,PHPMyAdmin再用utf8格式读取,肯定是乱码。如果PHP程序按正确的编码存入数据库,肯定是没有问题的。

  因此需要显式声明如下变量:

    SET character_set_client=’utf8’

    SET character_set_connection=’utf8’

    SET character_set_results=’utf8’

  上述声明与 SET NAMES ’utf8’等价,如此以来,解决问题的关键就变成了如何将 SET NAMES ’utf8’ 放入delphi for php程序并使其有效。

  其实非常简单,在form中找到数据库控件,在其OnAfterConnect事件中加入一行:$this-控件名-execute('set names utf8');

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  一切OK!

展开更多 50%)
分享

猜你喜欢

delphi for php完全支持中文三部曲

编程语言 网络编程
delphi for php完全支持中文三部曲

防晒妙招三部曲

防晒
防晒妙招三部曲

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

美白三部曲

美白
美白三部曲

男士保湿三部曲

护肤方法
男士保湿三部曲

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

僵尸部队三部曲

电脑网络
僵尸部队三部曲

春季膳食养生三部曲

食疗养生
春季膳食养生三部曲

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

js实现缩略图功能

js实现缩略图功能

jQuery Ajax之load()方法

jQuery Ajax之load()方法
下拉加载更多内容 ↓