关于xml 和php,那位高人帮忙(100分)

  • 主题发起人 主题发起人 gutian
  • 开始时间 开始时间
G

gutian

Unregistered / Unconfirmed
GUEST, unregistred user!
我在php中使用xml,以下是我的xsl的片断,在提交后我用php来接受值,英文显示没有问题,如果视中文则出现乱码。为什么?有什么解决方法。
<form name="addmeeting" method="post" action="/meeting/addmeeting.php" onSubmit="return checkvalid (this)">
<input type="hidden" name="meetingtype" value="办公会议"></input>
<table width="100%" border="0" align="center" bgcolor="#E1E9FF">
<tr>
<td width="18%">
<div align="center">会议类别</div>
</td>
<td width="82%">
<div align="left">
<select name="select" onchange="gettypevalue(this)">
<option value="办公会议">办公会议</option>
<option value="学术会议">学术会议</option>
<option value="其他">其他</option>
</select>
</div>
</td>
</tr>
<tr>
<td width="18%">
<div align="center">会议主题</div>
</td>
<td width="82%">
<div align="left">
<input type="text" name="subject" size="80"/>
</div>
</td>
</tr>
<tr>
<td width="18%">
<div align="center">会议日期</div>
</td>
<td width="82%">
<div align="left">
<input type="text" name="meetdate"/>
</div>
</td>
</tr>
<tr>
<td width="18%">
<div align="center">会议时间</div>
</td>
<td width="82%">
<div align="left">
<input type="text" name="meettime"/>
</div>
</td>
</tr>
<tr>
<td width="18%">
<div align="center">召集人</div>
</td>
<td width="82%">
<div align="left">
<input type="text" name="caller"/>
</div>
</td>
</tr>
<tr>
<td width="18%">
<div align="center">会议人数</div>
</td>
<td width="82%">
<div align="left">
<input type="text" name="joinnum" />
</div>
</td>
</tr>
<tr>
<td width="18%">
<div align="center">会议地点</div>
</td>
<td width="82%">
<div align="left">
<input type="text" name="address" size="80"/>
</div>
</td>
</tr>
<tr>
<td width="18%">
<div align="center">预约说明</div>
</td>
<td width="82%">
<div align="left">
<input type="text" name="des" size="80"/>
</div>
</td>
</tr>
</table>
<table width="100%" bgcolor="#88A5DB">
<tr>
<td>
<table width="50%" align="center" >
<tr>
<td align="center">
<input type="submit" name="Ok" value="提交" />
</td>
<td align="center">
<input type="reset" name="Cancel" value="取消" />
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>


回复贴子:
回复人: flyfishbird(魚) (2001-10-15 15:57:17) 得0分
非常奇怪的是如果我提交后使用:
echo $meetingtype;
//叶面上的会议类型
则在浏览器上出现的是乱嘛,但是我看院文件理的正确的中文。如何解决
 
我有个疑问的是:
如果我直接使用一下语句:
echo $meetingtype;
则在网页上看到的是乱嘛,但是源文件中是正确的中文,但是如果使用xml解析之后
(也就是生成也面的时候,按照xml的格式生成)在原文件中看到也是乱码,这是为什么。
 
关于以上的问题我已经解决,主要是utf-8的编码的原因,但是有一个关于xsl的问题。
就是我在网页显示的时候使用的是table,这样表格中写入的元素是如何赋指,使得我提交
表单以后可以直接使用名字变量获取他的值。
 
如何在xsl中实现下列:
<input type="hidden" value="[green]这里的值能够根据xml的内容赋值[/green]"/>
 
搞订了,如何把分收回来呀
 
分数是收不会了。送你个补贴吧:我的 PHP 在服务器端运行 xslt 的解决经验谈:
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。 所以还得强制转换一下。
 
谢谢yysun,但是我想到了一个更好的方法,就是使用php的iconv函数来解决,使用iconv函数
可以实现各种编码间的转换(具体信息参照www.php.net),这样只要在接受的叶面中把字符串
转换一下就可以了,当然这需要php.4.05以上。还有我觉得使用php+xml不一定需要expat,
可以直接使用echo输出xml格式的文档到叶面,但是我遇到一个问题,就是:
未完待续
 
以上这断代码是我从浏览器的原文件中拷贝出来的,我如果使用ie6可以正常浏览
如果使用ie6以下的版本就不能浏览,但是可以浏览大富翁的内容。这是为什么。请指教。
还有因为这两天忙于这个事情,没有来得及想xmlbbs的事情,请见谅。但是你放心,我一定
补上。呵呵
不好意思,如果一起提交总是失败,只能这样了
 
代码:
<?xml version="1.0" encoding="gb2312"?>
<?xml-stylesheet type="text/xsl" href="http://www.css.zju.edu.cn/meeting/xsl/meeting.xsl"?>
<CssOa Type="会议安排">
<Meeting Type="学院会议">
<MeetingPlan>
<Id>1</Id>
<Subject>学院建设会议</Subject>
<MeetDate>2001-10-17 08:24:08</MeetDate>
<BookingDate>2001-10-11 08:24:08</BookingDate>
<Bookinger>叶</Bookinger>
<Caller>陈</Caller>
<Address>教11-422</Address>
<Flag>1</Flag>
<Des></Des>
<Color>0</Color>
</MeetingPlan>
</Meeting>
</CssOa>
未完待续
 
ie5.0不支持xsl1.0
只支持部分
 
不对呀,yysun的dfw用的也是xsl吧????
 
呵呵,有搞定了,原来是。。。。。。,现在又有个问题出来了:
代码:
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> 
<xsl:template match="/">
<html>
<script type="text/javascript" language="JavaScript">
	<![CDATA[
		functiondo
reset(theform,dotype){
			if (dotype=3){
				theform.action="listmeeting.php";
				theform.dotype.value="list";
			}
			if (dotype=2){
				theform.action="confirmmeeting.php";
				theform.dotype.value="cancel";
			}
			theform.Ok.click();
		}
	]]>
</script>
<body>
<form name="addmeeting" method="post" action="/meeting/confirmmeeting.php" >
  <input type="hidden" name="dotype" value="ok"></input>
<xsl:for-each select="/CssOa/Meeting/MeetingDetail">
  <input type="hidden" name="id">
	<xsl:attribute name="value"><xsl:value-of select="Id"/></xsl:attribute>
	</input>
  <table width="100%" border="0" align="center" bgcolor="#E1E9FF">
    <tr>
      <td width="18%">
        <div align="center">会议类别</div>
      </td>
      <td width="82%" id="type">
        <div align="left">
			<input type="hidden" name="meetingtype"><xsl:attribute name="value"><xsl:value-of select="/CssOa/Meeting/@Type"/></xsl:attribute></input>
			<xsl:value-of select="/CssOa/Meeting/@Type"/>
        </div>
      </td>
    </tr>
    <tr>
      <td width="18%">
        <div align="center">会议主题</div>
      </td>
      <td width="82%" id="subject">
        <div align="left">
			<input type="hidden" name="subject"><xsl:attribute name="value"><xsl:value-of select="Subject"/></xsl:attribute></input>
          <xsl:value-of select="Subject"/>
        </div>
      </td>
    </tr>
    <tr>
      <td width="18%">
        <div align="center">会议日期时间</div>
      </td>
      <td width="82%">
        <div align="left">
			<input type="hidden" name="meetdate"><xsl:attribute name="value"><xsl:value-of select="MeetDate"/></xsl:attribute></input>
          <xsl:value-of select="MeetDate"/>
        </div>
      </td>
    </tr>
    <tr>
      <td width="18%">
        <div align="center">预约日期时间</div>
      </td>
      <td width="82%">
        <div align="left">
			<input type="hidden" name="bookingdate"><xsl:attribute name="value"><xsl:value-of select="BookingDate"/></xsl:attribute></input>
          <xsl:value-of select="BookingDate"/>
        </div>
      </td>
    </tr>
    <tr>
      <td width="18%">
        <div align="center">召集人</div>
      </td>
      <td width="82%">
        <div align="left">
			<input type="hidden" name="caller"><xsl:attribute name="value"><xsl:value-of select="Caller"/></xsl:attribute></input>
          <xsl:value-of select="Caller"/>
        </div>
      </td>
    </tr>
    <tr>
      <td width="18%">
        <div align="center">预约人</div>
      </td>
      <td width="82%">
        <div align="left">
			<input type="hidden" name="bookinger"><xsl:attribute name="value"><xsl:value-of select="Bookinger"/></xsl:attribute></input>
          <xsl:value-of select="Bookinger"/>
        </div>
      </td>
    </tr>
    <tr>
      <td width="18%">
        <div align="center">会议人数</div>
      </td>
      <td width="82%">
        <div align="left">
			<input type="hidden" name="joinnum"><xsl:attribute name="value"><xsl:value-of select="JoinNum"/></xsl:attribute></input>
          <xsl:value-of select="JoinNum"/>
        </div>
      </td>
    </tr>
    <tr>
      <td width="18%">
        <div align="center">会议地点</div>
      </td>
      <td width="82%">
        <div align="left">
			<input type="hidden" name="address"><xsl:attribute name="value"><xsl:value-of select="Address"/></xsl:attribute></input>
          <xsl:value-of select="Address"/>
        </div>
      </td>
    </tr>
    <tr>
      <td width="18%">
        <div align="center">预约说明</div>
      </td>
      <td width="82%">
        <div align="left">
			<input type="hidden" name="des"><xsl:attribute name="value"><xsl:value-of select="Des"/></xsl:attribute></input>
          <xsl:value-of select="Des"/>
        </div>
      </td>
    </tr>
  </table>
<table width="100%" bgcolor="#88A5DB">
<tr>
<td>
<table width="50%" align="center" >
	<tr>
	<td align="center">
	    <input type="button" name="Ok" value="确认" onclick="doreset(this,1)"/>
</td>
<td align="center">
    <input type="button" name="Cancel" value="取消" onclick="doreset(this,2)"/>
</td>
<td align="center">
    <input type="button" name="Return" value="返回"  onclick="doreset(this,3)"/>
</td>
	</tr>
</table>
</td>
</tr>
</table>
</xsl:for-each>
</form>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
 
上面的代码,如果点击按钮,网页上有错误。难道不能用onclick么
 
onclick 当然可以用, 您的问题根本就只是个 Javascript 错误: this 不对!
 
是的,我的问题已经解决了,呵呵,应该是parent。谢谢你,有没有看我写给你的关于
mhtml和mathml的问题。如果你有什么好的建议,希望告知。会议预约完成了。谢谢谢谢。
分给你
 
多人接受答案了。
 
后退
顶部