论坛首页 编程语言技术论坛

quercus-4.0.1(java下的php)中文编码的bug解决方法

浏览 5875 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-24  
PHP
很喜欢这个java下的php环境,可惜一直bug一大堆,好不容易盼来4.0,中文编码问题还是很多,大致解决了几个。

1.unicode编码第三个字符错位问题,一个低级错误,估计是copy了一行忘了改,哈
    com.caucho.vfs.ReaderStream 111行
buf[i++] = (byte) (0x80 | ((ch >> 6) & 0x3f));

改为
buf[i++] = (byte) (0x80 | ((ch) & 0x3f));


2.xml_parse_into_struct中文问题
    com.caucho.quercus.lib.xml.Xml 439~441行都注释掉
    //if (_xmlString.isUnicode())
    //  is = new InputSource(_xmlString.toReader("utf-8"));
    //else
      is = new InputSource(_xmlString.toInputStream());


3.PDO中文sql查询乱码问题
  com.caucho.quercus.lib.db.PDO 151行改为
  private static String ENCODING = "UTF-8";


4.类成员变量名编码问题,这个问题比较严重,会影响__get魔术方法的使用
    com.caucho.quercus.parser.ClassScope 112行改为
_cl.addValue(new UnicodeValueImpl(name), value, visibility, comment);


另外还有stream_get_contents有编码问题,可以用file_get_contents代替着用。
还有很傻的_SERVER数组访问时不能加引号的问题,小问题还是很多,懒得去改了。
   发表时间:2009-09-25  
还有一个更让人郁闷的问题,Mysq数据操作,insert select出来的都是乱码!!!
0 请登录后投票
   发表时间:2009-09-25   最后修改:2009-09-25
banxitan 写道
还有一个更让人郁闷的问题,Mysq数据操作,insert select出来的都是乱码!!!


这个肯定是配置问题吧,mysql库尽量用utf-8,web.xml里连接参数也设成一样的
	<database jndi-name="jdbc/mysql">
	   <driver type="org.gjt.mm.mysql.Driver"><!--com.mysql.jdbc.Driver-->
			<url>jdbc:mysql://localhost:3306/db_name</url>
			<user>root</user>
			<password></password>
			<init-param useUnicode="true"/>
			<init-param characterEncoding="utf-8" />
		</driver>
		<prepared-statement-cache-size>50</prepared-statement-cache-size>
		<max-connections>100</max-connections>
		<max-idle-time>30s</max-idle-time>
	</database>

0 请登录后投票
   发表时间:2009-12-28  
也在quercus.
我用bean从DB中读取的数据,DB连接是GBK的,在php中做echo也是乱码.
不得不这样转一下:
new String(str.getBytes("GBK"), "ISO-8859-1");

请教楼主,有何好办法.直接输出中文;
0 请登录后投票
   发表时间:2010-05-16   最后修改:2010-05-16
com.caucho.vfs.ReaderStream 修改了111行.
编译,并替换原来的ReaderStream.class,之前还能运行的程序,现在无论到那个页面全都是错误.

是否可以在PHP中调用Java代码,把生成的数据库结果集转码之后再输出,Google了N久之后,还是没有找到比较好的解决办法.
0 请登录后投票
   发表时间:2010-05-16  
nbzx 写道
banxitan 写道
还有一个更让人郁闷的问题,Mysq数据操作,insert select出来的都是乱码!!!


这个肯定是配置问题吧,mysql库尽量用utf-8,web.xml里连接参数也设成一样的
	<database jndi-name="jdbc/mysql">
	   <driver type="org.gjt.mm.mysql.Driver"><!--com.mysql.jdbc.Driver-->
			<url>jdbc:mysql://localhost:3306/db_name</url>
			<user>root</user>
			<password></password>
			<init-param useUnicode="true"/>
			<init-param characterEncoding="utf-8" />
		</driver>
		<prepared-statement-cache-size>50</prepared-statement-cache-size>
		<max-connections>100</max-connections>
		<max-idle-time>30s</max-idle-time>
	</database>



这个配置试过了,页面本身的中文是能够显示的,但是从MySQL出来的数据,死活不能正常显示.乱码一堆.
0 请登录后投票
   发表时间:2010-05-25   最后修改:2010-05-25
世界如此悲哀,绕了一大圈儿,把中文问题解决了.

http://wi-fizzle.com/downloads/base64.sql
创建BASE64_ENCODE和BASE64_DECODE函数

插入的时候先BASE64_ENCODE,查询的时候BASE64_DECODE进行查询

例如:

插入:
$sql = "insert into enc values(null, '我的邮件是xxxxxx@163.com')";


查询:

$sql = "select * from enc where BASE64_DECODE(base64) like '%邮件%';";


查询不可能每次都手动去加这么一个函数,最好封装一下.


很可笑的解决方案.

哈哈哈

0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics