<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[[接口传值]request.getParameter(变量名)获取的字符串中原来的加号变成了空格，url传值。此时往往会出现没说需要urlencode带来的系列问题。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Php/Js/Shell/Go]]></category>
<pubDate>Mon, 15 Jul 2013 08:07:39 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今天我在调程序时，遇到了见郁闷的事，我用ajax从前台显示页面传字符串变量给处理页面，出现了件怪事，我想传的内容是abc+，但接收以后用System.out.println()输出是abc空格。反复测试好几遍，都是这个结果，真是令人郁闷。在网上搜了搜，找到了原因。<br/>原因：&nbsp;&nbsp; url中有些字符被转义，比如空格被编码成加号，于是传的参数明明是加号，获取的值却成了空格。如何解决呢？如果是通过url传递参数，应该对其进行必要的编码。<br/>解决办法：<br/>在javascript中加入&nbsp;&nbsp; <br/><textarea name="code" class="php" rows="15" cols="100">
function URLencode(sStr) 
&#123;
&nbsp;&nbsp;&nbsp;&nbsp;return escape(sStr).replace(/&#92;+/g, &#039;%2B&#039;).replace(/&#92;&quot;/g,&#039;%22&#039;).replace(/&#92;&#039;/g, &#039;%27&#039;).replace(/&#92;//g,&#039;%2F&#039;);
&#125;
</textarea><br/>对字符串进行处理.如：var str=URLencode(&quot;abc+&quot;)<br/><br/><br/>综上，即url里有如下四个特殊字符时：（1）加号：+&nbsp;&nbsp;&nbsp;&nbsp;（2）双引号：&quot;&nbsp;&nbsp;&nbsp;&nbsp;(3)单引号：&#039;&nbsp;&nbsp;&nbsp;&nbsp;（4）斜杠：/时，既要进行特殊处理。<br/><br/><br/>搞自：http://www.blogjava.net/juhongtao/archive/2009/07/31/168639.html<br/>更多参考：http://blog.csdn.net/aragorn_177/article/details/2612974<br/><br/>背景：<br/>对方部门给一接中，没说明是urlencode直接给一个get参数过来，于是对生成的+这样的，通过get后没了，变成了空格（特别是指浏览器里），<br/>于是得这样：<br/><textarea name="code" class="php" rows="15" cols="100">
$codeStr = urldecode(&quot;x3LCVymudOXKl40YwZledetlpbOmC0wS823N3tptZ54JeWS38pInvk3VkRBzTXyJvqSCd9JZHTgfnRsguGyjI4p5ejA8%2bKhXTZlA4rQ6rmpDczbbxGfsZj%2bJ1tC%2bR9hH&quot;);
echo $codeStr;
echo &quot;&#92;n&quot;;
$codeStr = urlencode($codeStr);
echo $codeStr;
echo &quot;&#92;n&quot;;
exit;
</textarea><br/><br/>输出：<br/>---------- 调试PHP ----------<br/>x3LCVymudOXKl40YwZledetlpbOmC0wS823N3tptZ54JeWS38pInvk3VkRBzTXyJvqSCd9JZHTgfnRsguGyjI4p5ejA8+KhXTZlA4rQ6rmpDczbbxGfsZj+J1tC+R9hH<br/>x3LCVymudOXKl40YwZledetlpbOmC0wS823N3tptZ54JeWS38pInvk3VkRBzTXyJvqSCd9JZHTgfnRsguGyjI4p5ejA8%2BKhXTZlA4rQ6rmpDczbbxGfsZj%2BJ1tC%2BR9hH<br/><br/>输出完成 (耗时 0 秒) - 正常终止<br/><br/><br/>最后，其实通过测试，Curl命令行里也会对+进行urldecode进行了转码后变成了空格后进入到PHP程序变量里，于是加号没了，这种情况要想加号还在，得先通过工具urlencode一把，再传入也就出来加号了Ok了，后再一次urlencode一把就变成了%2B的+了：<br/>相当于想通过浏览器传入urlencode的%2B，则需要在浏览器里输入对对+进行编码为%2B的码，后浏览器解码一次，还原成+号后，再编码，也就是原来输入的编码了，串还是那个串，传入编码后的被解开，再被编码的一个过程。<br/><br/>常常在post进行发送时用的是：<br/><textarea name="code" class="php" rows="15" cols="100">
$data = array(&quot;gsid&quot;=&gt;$_POST[&quot;gsid&quot;]);
echo http_build_query($data);
</textarea><br/>在此时，这个函数相当于一个urlencode功能，它有一个默认的参数：<br/>int $enc_type = PHP_QUERY_RFC1738 <br/>如果 enc_type 是 PHP_QUERY_RFC1738，则编码将会以 » RFC 1738 标准和 application/x-www-form-urlencoded 媒体类型进行编码，空格会被编码成加号（+）。<br/>-----------------------------------------<br/>同样，那个+会变成%2B，呵呵。
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [接口传值]request.getParameter(变量名)获取的字符串中原来的加号变成了空格，url传值。此时往往会出现没说需要urlencode带来的系列问题。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>