WAP中(zhōng),中(zhōng)文字符傳遞的解決方案
(Add by 2005-03-04)很多朋友問到ASP下(xià)面表單提交的問題,現給出源碼下(xià)載,和實例,希望能給大(dà)家參考。
注:主要是表單提交時候,是否采用:e , :n ,和默認這集中(zhōng)形式<a>默認是:e,<anchor>默認是:n
測試地址:下(xià)載源碼到本機測試
用opera,或M3GATE點擊測試
源碼下(xià)載:點擊下(xià)載
【不能下(xià)載時PM通知(zhī)我(wǒ)(wǒ)】
制作WAP站點,你可以采用任何後台程序來相結合,ASP、ASP.NET、PHP、JSP等。
就我(wǒ)(wǒ)個人而言,我(wǒ)(wǒ)隻試過ASP和PHP下(xià)的解決方案,經過測試,給出ASP、PHP下(xià)的解決方案。
ASP中(zhōng)的問題參考下(xià)圖:
上圖中(zhōng)所所,如果文件采用UTF-8格式存儲,字符編碼設置爲encoding="UTF-8",則會出現:采用A,GET方式提交的時候,有奇偶字符問題,也就是說提交偶數個字符沒有問題,提交奇數個字符最後一(yī)個字符就會出現亂碼;若采用<postfield>,POST方式提交,則還是需要解碼16進制的函數。
如果是采用JavaScript則,接收頁面:
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="936"%>
……
<%= decodeURI(Request("name"))%>
【2005年1月27日新添】WAP中(zhōng)文字符傳遞 ASP解決方案
ASP頁面中(zhōng),隻要把Request來的數據采用以下(xià)函數URLDecode解碼就可以了
<%=URLDecode(Request("name"))%>
<%
Function URLDecode(enStr)
dim deStr
dim c,i,v
deStr=""
for i=1 to len(enStr)
c=Mid(enStr,i,1)
if c="%" then
v=eval("&h"+Mid(enStr,i+1,2))
if v<128 then
deStr=deStr&chr(v)
i=i+2
else
if isvalidhex(mid(enstr,i,3)) then
if isvalidhex(mid(enstr,i+3,3)) then
v=eval("&h"+Mid(enStr,i+1,2)+Mid(enStr,i+4,2))
deStr=deStr&chr(v)
i=i+5
else
v=eval("&h"+Mid(enStr,i+1,2)+cstr(hex(asc(Mid(enStr,i+3,1)))))
deStr=deStr&chr(v)
i=i+3
end if
else
destr=destr&c
end if
end if
else
if c="+" then
deStr=deStr&" "
else
deStr=deStr&c
end if
end if
next
URLDecode=deStr
end function
function isvalidhex(str)
isvalidhex=true
str=ucase(str)
if len(str)<>3 then isvalidhex=false:exit function
if left(str,1)<>"%" then isvalidhex=false:exit function
c=mid(str,2,1)
if not (((c>="0") and (c<="9")) or ((c>="A") and (c<="Z"))) then isvalidhex=false:exit function
c=mid(str,3,1)
if not (((c>="0") and (c<="9")) or ((c>="A") and (c<="Z"))) then isvalidhex=false:exit function
end function
%>
<%=URLDecode("%BC%BC%CA%F5%D7%A8%C0%B8")%>
【WAP中(zhōng)文字符傳遞 PHP解決方案】
現在給出PHP中(zhōng)的完美解決方案,無論是采用普通ASCII碼,還是UTF-8格式存儲,提交的中(zhōng)文字符奇偶,都沒有問題。
采用普通文件格式ASCII碼存儲,保存爲testgb.php
<?php
header("Content-Type: text/vnd.wap.wml;charset=GB2312");
echo '<?xml version="1.0" encoding="GB2312"?>';
echo '<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">';
?>
<wml>
<card id="main" title="PHP Web">
<p>
GET提交,結果:
<?php echo iconv("utf-8", "gb2312",$_GET["name"]);?><br/>
POST提交,結果:
<?php echo iconv("utf-8", "gb2312",urldecode($_POST["name"])); ?><br/>
<input name="name" emptyok="false" tabindex="2" format="*m"/>
<a href="testgb.php?name=$(name:e)">提交aaa</a><br/>
<anchor>提交anchor
<go href="testgb.php" method="post">
<postfield name="name" value="$(name:e)" />
</go>
</anchor><br/>
</p>
</card>
</wml>
采用UTF-8格式存儲,保存爲test_utf.php
<?php
header("Content-Type: text/vnd.wap.wml;charset=UTF-8");
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">';
?>
<wml>
<card id="main" title="PHP Web">
<p>
GET提交,結果:
<?php echo $_GET["name"]; ?><br/>
POST提交,結果:
<?php echo urldecode($_POST["name"]); ?><br/>
<input name="name" emptyok="false" tabindex="2" format="*m"/>
<a href="test_utf.php?name=$(name:e)">提交aaa</a><br/>
<anchor>提交anchor
<go href="test_utf.php" method="post">
<postfield name="name" value="$(name:e)" />
</go>
</anchor><br/>
</p>
</card>
</wml>
JSP方面我(wǒ)(wǒ)不會,沒有測試。
JSP方面,苛子:測試也有中(zhōng)文奇偶字符問題
public static String decode(String s)
{
StringBuffer stringbuffer = new StringBuffer();
s = s.replace('%','0');
for(int i=1; i<s.length(); i+=3)
{
if(s.charAt(i)=='+')
{
stringbuffer.append(' ');
i++;
continue;
}
try {
stringbuffer.append((char)Integer.parseInt(s.substring(i, i+2), 16));
} catch (Exception e) {
}
}
String s1 = stringbuffer.toString();
try
{
byte abyte0[] = s1.getBytes("ISO-8859-1");
s1 = new String(abyte0, "UTF-8");
}
catch(UnsupportedEncodingException unsupportedencodingexception) {}
return s1;
}
苛子說:這個decode是我(wǒ)(wǒ)修改過了的, Servlet裏面那個decode好像有問題,解不了奇數個的中(zhōng)文.
這個decode是我(wǒ)(wǒ)修改過了的, Servlet裏面那個decode好像有問題,解不了奇數個的中(zhōng)文.
其他可參考:
www.blueidea.com/bbs/NewsDetail.asp?id=1808167
www.blueidea.com/bbs/newsdetail.asp?id=1499094
(Add by 2005-03-04)很多朋友問到ASP下(xià)面表單提交的問題,現給出源碼下(xià)載,和實例,希望能給大(dà)家參考。
注:主要是表單提交時候,是否采用:e , :n ,和默認這集中(zhōng)形式<a>默認是:e,<anchor>默認是:n
測試地址:下(xià)載源碼到本機測試
用opera,或M3GATE點擊測試
源碼下(xià)載:點擊下(xià)載
【不能下(xià)載時PM通知(zhī)我(wǒ)(wǒ)】
制作WAP站點,你可以采用任何後台程序來相結合,ASP、ASP.NET、PHP、JSP等。
就我(wǒ)(wǒ)個人而言,我(wǒ)(wǒ)隻試過ASP和PHP下(xià)的解決方案,經過測試,給出ASP、PHP下(xià)的解決方案。
ASP中(zhōng)的問題參考下(xià)圖:
上圖中(zhōng)所所,如果文件采用UTF-8格式存儲,字符編碼設置爲encoding="UTF-8",則會出現:采用A,GET方式提交的時候,有奇偶字符問題,也就是說提交偶數個字符沒有問題,提交奇數個字符最後一(yī)個字符就會出現亂碼;若采用<postfield>,POST方式提交,則還是需要解碼16進制的函數。
如果是采用JavaScript則,接收頁面:
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="936"%>
……
<%= decodeURI(Request("name"))%>
【2005年1月27日新添】WAP中(zhōng)文字符傳遞 ASP解決方案
ASP頁面中(zhōng),隻要把Request來的數據采用以下(xià)函數URLDecode解碼就可以了
<%=URLDecode(Request("name"))%>
<%
Function URLDecode(enStr)
dim deStr
dim c,i,v
deStr=""
for i=1 to len(enStr)
c=Mid(enStr,i,1)
if c="%" then
v=eval("&h"+Mid(enStr,i+1,2))
if v<128 then
deStr=deStr&chr(v)
i=i+2
else
if isvalidhex(mid(enstr,i,3)) then
if isvalidhex(mid(enstr,i+3,3)) then
v=eval("&h"+Mid(enStr,i+1,2)+Mid(enStr,i+4,2))
deStr=deStr&chr(v)
i=i+5
else
v=eval("&h"+Mid(enStr,i+1,2)+cstr(hex(asc(Mid(enStr,i+3,1)))))
deStr=deStr&chr(v)
i=i+3
end if
else
destr=destr&c
end if
end if
else
if c="+" then
deStr=deStr&" "
else
deStr=deStr&c
end if
end if
next
URLDecode=deStr
end function
function isvalidhex(str)
isvalidhex=true
str=ucase(str)
if len(str)<>3 then isvalidhex=false:exit function
if left(str,1)<>"%" then isvalidhex=false:exit function
c=mid(str,2,1)
if not (((c>="0") and (c<="9")) or ((c>="A") and (c<="Z"))) then isvalidhex=false:exit function
c=mid(str,3,1)
if not (((c>="0") and (c<="9")) or ((c>="A") and (c<="Z"))) then isvalidhex=false:exit function
end function
%>
<%=URLDecode("%BC%BC%CA%F5%D7%A8%C0%B8")%>
【WAP中(zhōng)文字符傳遞 PHP解決方案】
現在給出PHP中(zhōng)的完美解決方案,無論是采用普通ASCII碼,還是UTF-8格式存儲,提交的中(zhōng)文字符奇偶,都沒有問題。
采用普通文件格式ASCII碼存儲,保存爲testgb.php
<?php
header("Content-Type: text/vnd.wap.wml;charset=GB2312");
echo '<?xml version="1.0" encoding="GB2312"?>';
echo '<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">';
?>
<wml>
<card id="main" title="PHP Web">
<p>
GET提交,結果:
<?php echo iconv("utf-8", "gb2312",$_GET["name"]);?><br/>
POST提交,結果:
<?php echo iconv("utf-8", "gb2312",urldecode($_POST["name"])); ?><br/>
<input name="name" emptyok="false" tabindex="2" format="*m"/>
<a href="testgb.php?name=$(name:e)">提交aaa</a><br/>
<anchor>提交anchor
<go href="testgb.php" method="post">
<postfield name="name" value="$(name:e)" />
</go>
</anchor><br/>
</p>
</card>
</wml>
采用UTF-8格式存儲,保存爲test_utf.php
<?php
header("Content-Type: text/vnd.wap.wml;charset=UTF-8");
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">';
?>
<wml>
<card id="main" title="PHP Web">
<p>
GET提交,結果:
<?php echo $_GET["name"]; ?><br/>
POST提交,結果:
<?php echo urldecode($_POST["name"]); ?><br/>
<input name="name" emptyok="false" tabindex="2" format="*m"/>
<a href="test_utf.php?name=$(name:e)">提交aaa</a><br/>
<anchor>提交anchor
<go href="test_utf.php" method="post">
<postfield name="name" value="$(name:e)" />
</go>
</anchor><br/>
</p>
</card>
</wml>
JSP方面我(wǒ)(wǒ)不會,沒有測試。
JSP方面,苛子:測試也有中(zhōng)文奇偶字符問題
public static String decode(String s)
{
StringBuffer stringbuffer = new StringBuffer();
s = s.replace('%','0');
for(int i=1; i<s.length(); i+=3)
{
if(s.charAt(i)=='+')
{
stringbuffer.append(' ');
i++;
continue;
}
try {
stringbuffer.append((char)Integer.parseInt(s.substring(i, i+2), 16));
} catch (Exception e) {
}
}
String s1 = stringbuffer.toString();
try
{
byte abyte0[] = s1.getBytes("ISO-8859-1");
s1 = new String(abyte0, "UTF-8");
}
catch(UnsupportedEncodingException unsupportedencodingexception) {}
return s1;
}
苛子說:這個decode是我(wǒ)(wǒ)修改過了的, Servlet裏面那個decode好像有問題,解不了奇數個的中(zhōng)文.
這個decode是我(wǒ)(wǒ)修改過了的, Servlet裏面那個decode好像有問題,解不了奇數個的中(zhōng)文.
其他可參考:
www.blueidea.com/bbs/NewsDetail.asp?id=1808167
www.blueidea.com/bbs/newsdetail.asp?id=1499094
文章來源:http://www.blueidea.com/bbs/NewsDetail.asp?GroupNa