flash和php的url编码传换

博客讲述了在请教搞flash画板时,getURL传出变量含特殊字符,PHP接收输出时出现丢失的问题,如xml文件中的引号丢失。并给出两种解决办法,一是在flash里用escape编码,PHP里用stripslashes去掉反斜线;二是在flash里改造xml格式,但此方法会加大文件,不可取。
那天请教HBr搞flash画板,出现了getURL传出的变量里有特殊字符在php接变量输出出现丢失.比如:输出一个xml文件里带引号,到php里引号不见了.
Code:
<lines><line x1="297" x2="299" y1="292.95" y2="293.95" time="2563" /><line x1="299" x2="367.95" y1="293.95" y2="311.95" time="2720" /></lines>
</lines>

变成:
Code:
<lines><line x1=297 x2=299 y1=292.95 y2=293.95 time=2563 /><line x1=299 x2=367.95 y1=293.95 y2=311.95 time=2720 /></lines>

做法1:
只需要在flash里用escape把lines.toString()字符串转换为以URL编码格式进行编码,将所有非字母数字的字符都转义为十六进制序列字符串。
Code:

var lines = new XML("<?xml version=\"1.0\" standalone=\"no\"?><lines></lines>");
......
save.onRelease=function(){
contents=escape(lines.toString());
trace(contents);
getURL("http://localhost/php/myapp/flash/huaban/savefile.php?filename="+filename+"&contents="+contents)
}

然后在php里用stripslashes去掉反斜线(因为php自动将传过来的十六进制字符转成了ASCII字符并加入了反斜线,所以我们只要去掉就行)
Code:

<?php
$contents=$_GET[contents];
header("content-type:text/xml");
header("Expires:-1");
echo stripslashes($contents);
?>

做法2:
在flash里尽量不输出有特殊字符的字符串,比如本例可在flash里改造xml成如下格式的,然后在php里加上
Code:
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
输出xml声明。
Code:

<lines><line><x1>297</x1><y1>275</y1><x2>298</x2><y2>275</y2><time>2330</time></line></lines>
<lines><line><x1>297</x1><y1>275</y1><x2>298</x2><y2>275</y2><time>2330</time></line><line><x1>298</x1><y1>275</y1><x2>299</x2><y2>275</y2><time>2395</time></line></lines>
<lines><line><x1>297</x1><y1>275</y1><x2>298</x2><y2>275</y2><time>2330</time></line><line><x1>298</x1><y1>275</y1><x2>299</x2><y2>275</y2><time>2395</time></line><line><x1>299</x1><y1>275</y1><x2>300</x2><y2>275</y2><time>2491</time></line></lines>

不过这种格式会大大加大xml文件,本人觉得不可取。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值