Y
yysun
Unregistered / Unconfirmed
GUEST, unregistred user!
PHP 中 XML 处理模块 expat 只能支持US-ASCII,ISO-8859-1,UTF-8 三种编码。
http://www.php.net/manual/en/ref.xml.php
由于它的 XML 处理器并不支持中文 gb2312 和 big5 编码。于是就设想是否可以把含有
中文的 xml 和 xsl 文件先用 utf8_encode 函数编成 utf-8,送到 xslt_process 函数
中去解析,然后再把解析的结果用 utf8_decode 函数转回来?
但是,愚蠢的 PHP 到了 4.0.6,utf8_encode,utf8_decode 函数竟然只能做 ISO-8859-1
和 UTF-8 两种编码的互换。并不能保证转换 gb2312 和 utf-8。
http://www.php.net/manual/en/function.utf8-encode.php
好在 PHP 4 支持 COM,能不能通过 COM 调用 MSXML 呢?可是 MSXML 使用的是utf-16 编
码,PHP 不支持 utf-16,只能输出一堆乱码。 PHP 还不支持调用 WinAPI ......
这样,条条大路都不通“北京”了
唯一的办法,还算比较简单的办法,就是为 MSXML 做个 COM 的 wrapper,把 MSXML 输出
的 utf-16 码转换为 gb2312。于是调用这个 COM 在服务器端处理 xslt 的程序是:
<?
$transform = new COM("xmln.transformation") or die("Can't start COM");
$html = $transform->transform('c:/test/mtop.xml', 'c:/test/mtop2.xsl');
print($html);
$transform = null;
?>
另外,当 php 向 COM 传送字符串时,应该传来 WideString/BSTR,但是 php 有时候并不
能正确编码含有中文的 WideString/BSTR。 所以还得强制转换一下。
http://www.php.net/manual/en/ref.xml.php
由于它的 XML 处理器并不支持中文 gb2312 和 big5 编码。于是就设想是否可以把含有
中文的 xml 和 xsl 文件先用 utf8_encode 函数编成 utf-8,送到 xslt_process 函数
中去解析,然后再把解析的结果用 utf8_decode 函数转回来?
但是,愚蠢的 PHP 到了 4.0.6,utf8_encode,utf8_decode 函数竟然只能做 ISO-8859-1
和 UTF-8 两种编码的互换。并不能保证转换 gb2312 和 utf-8。
http://www.php.net/manual/en/function.utf8-encode.php
好在 PHP 4 支持 COM,能不能通过 COM 调用 MSXML 呢?可是 MSXML 使用的是utf-16 编
码,PHP 不支持 utf-16,只能输出一堆乱码。 PHP 还不支持调用 WinAPI ......
这样,条条大路都不通“北京”了
唯一的办法,还算比较简单的办法,就是为 MSXML 做个 COM 的 wrapper,把 MSXML 输出
的 utf-16 码转换为 gb2312。于是调用这个 COM 在服务器端处理 xslt 的程序是:
<?
$transform = new COM("xmln.transformation") or die("Can't start COM");
$html = $transform->transform('c:/test/mtop.xml', 'c:/test/mtop2.xsl');
print($html);
$transform = null;
?>
另外,当 php 向 COM 传送字符串时,应该传来 WideString/BSTR,但是 php 有时候并不
能正确编码含有中文的 WideString/BSTR。 所以还得强制转换一下。