<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[刘新修]]></title> 
<link>http://pic1.liuxinxiu.com:80/index.php</link> 
<description><![CDATA[刘新修的个人博客 (Liuxinxiu'S Blog)]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[刘新修]]></copyright>
<item>
<link>http://pic1.liuxinxiu.com:80/s//</link>
<title><![CDATA[php json 处理gbk转码utf-8问题（ json_encode转换数组，值为null）]]></title> 
<author>刘新修 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[PHP/Java/Go]]></category>
<pubDate>Tue, 28 Jul 2020 05:40:35 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/s//</guid> 
<description>
<![CDATA[ 
	<p><span style="color: rgb(83, 104, 121); font-family: &quot;Microsoft YaHei&quot;, Helvetica, Arial, &quot;Lucida Grande&quot;, Tahoma, sans-serif; font-size: 15px;">遇到个很幼稚的问题，用json_encode把数组转换为json时，发现转化的值为null。怎么回事呢？查找手册：发现了下面的话：</span></p><div style="box-sizing: inherit; border: 0px; font-family: &quot;Microsoft YaHei&quot;, Helvetica, Arial, &quot;Lucida Grande&quot;, Tahoma, sans-serif; font-size: 15px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(83, 104, 121);">该函数只能接受 UTF-8 编码的数据（译注：指字符/字符串类型的数据）</div><div style="box-sizing: inherit; border: 0px; font-family: &quot;Microsoft YaHei&quot;, Helvetica, Arial, &quot;Lucida Grande&quot;, Tahoma, sans-serif; font-size: 15px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(83, 104, 121);">&nbsp;</div><div style="box-sizing: inherit; border: 0px; font-family: &quot;Microsoft YaHei&quot;, Helvetica, Arial, &quot;Lucida Grande&quot;, Tahoma, sans-serif; font-size: 15px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(83, 104, 121);">原来数组中有中文，需要转码哦，写个转换字符编码的函数吧：</div><div class="codeText"><div class="codeHead">PHP代码</div><ol start="1" class="dp-c"><li class="alt"><span><span class="keyword">function</span><span> encodeConvert(</span><span class="vars">$str</span><span>,</span><span class="vars">$fromCode</span><span>,</span><span class="vars">$toCode</span><span>)&nbsp;&nbsp;</span></span></li><li><span>&#123;&nbsp;&nbsp;</span></li><li class="alt"><span><span class="keyword">if</span><span> (</span><span class="func">strtoupper</span><span>(</span><span class="vars">$toCode</span><span>) == </span><span class="func">strtoupper</span><span>(</span><span class="vars">$fromCode</span><span>)) </span><span class="keyword">return</span><span> </span><span class="vars">$str</span><span>;&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">if</span><span> (</span><span class="func">is_string</span><span>(</span><span class="vars">$str</span><span>)) &#123;&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">if</span><span> (function_exists(</span><span class="string">'mb_convert_encoding'</span><span>)) &#123;&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">return</span><span> mb_convert_encoding(</span><span class="vars">$str</span><span>, </span><span class="vars">$toCode</span><span>, </span><span class="vars">$fromCode</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&#125; <span class="keyword">else</span><span> &#123;&nbsp;&nbsp;</span></span></li><li><span><span class="keyword">return</span><span> iconv(</span><span class="vars">$fromCode</span><span>, </span><span class="vars">$toCode</span><span>, </span><span class="vars">$str</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&#125;&nbsp;&nbsp;</span></li><li><span>&#125; <span class="keyword">elseif</span><span> (</span><span class="func">is_array</span><span>(</span><span class="vars">$str</span><span>)) &#123;&nbsp;&nbsp;</span></span></li><li class="alt"><span><span class="keyword">foreach</span><span> (</span><span class="vars">$str</span><span> </span><span class="keyword">as</span><span> </span><span class="vars">$k</span><span> =&gt; </span><span class="vars">$v</span><span>) &#123;&nbsp;&nbsp;</span></span></li><li><span><span class="vars">$str</span><span>[</span><span class="vars">$k</span><span>] = encodeConvert(</span><span class="vars">$v</span><span>, </span><span class="vars">$fromCode</span><span>, </span><span class="vars">$toCode</span><span>);&nbsp;&nbsp;</span></span></li><li class="alt"><span>&#125;&nbsp;&nbsp;</span></li><li><span><span class="keyword">return</span><span> </span><span class="vars">$str</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&#125;&nbsp;&nbsp;</span></li><li><span><span class="keyword">return</span><span> </span><span class="vars">$str</span><span>;&nbsp;&nbsp;</span></span></li><li class="alt"><span>&#125;&nbsp;&nbsp;</span></li></ol></div><div style="box-sizing: inherit; border: 0px; font-family: &quot;Microsoft YaHei&quot;, Helvetica, Arial, &quot;Lucida Grande&quot;, Tahoma, sans-serif; font-size: 15px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline; color: rgb(83, 104, 121);">对于数组，通过下面方式json_encode调用，一切ok。</div><div class="codeText"><div class="codeHead">PHP代码</div><ol start="1" class="dp-c"><li class="alt"><span><span class="vars">$json_api</span><span>=json_encode(encodeConvert(</span><span class="vars">$json_api</span><span>,</span><span class="string">'gb2312'</span><span>,</span><span class="string">'utf-8'</span><span>));&nbsp;&nbsp;</span></span></li><li><span><span class="vars">$json_api</span><span>=json_decode(json_decode(</span><span class="vars">$json_api</span><span>));&nbsp;&nbsp;</span></span></li></ol></div><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-family: &quot;Microsoft YaHei&quot;, &quot;SF Pro Display&quot;, Roboto, Noto, Arial, &quot;PingFang SC&quot;, sans-serif; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow-wrap: break-word; font-variant-ligatures: common-ligatures;">今天数组json_encode转json的时候，输出一片空白，难道是数据量太大了？导致输出空白了？<br style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 0px; overflow-wrap: break-word;" />后来检查下php程序似乎没有出错，就是json_encode的时候出现了问题，那到底是什么问题呢？</p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-family: &quot;Microsoft YaHei&quot;, &quot;SF Pro Display&quot;, Roboto, Noto, Arial, &quot;PingFang SC&quot;, sans-serif; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow-wrap: break-word; font-variant-ligatures: common-ligatures;">我们先来说下json_encode这个函数</p><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>(PHP&nbsp;5&nbsp;&gt;=&nbsp;5.2.0,&nbsp;PECL&nbsp;json&nbsp;&gt;=&nbsp;1.2.0,&nbsp;PHP&nbsp;7)&nbsp;&nbsp;</span></span></li><li><span>json_encode&nbsp;&mdash;&nbsp;对变量进行&nbsp;JSON&nbsp;编码&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span>说明&nbsp;&nbsp;</span></li><li class="alt"><span>-----------------------------------------------------------&nbsp;&nbsp;</span></li><li><span><span class="keyword">string</span><span>&nbsp;json_encode&nbsp;(&nbsp;mixed&nbsp;$value&nbsp;[,&nbsp;</span><span class="keyword">int</span><span>&nbsp;$options&nbsp;=&nbsp;0&nbsp;[,&nbsp;</span><span class="keyword">int</span><span>&nbsp;$depth&nbsp;=&nbsp;512&nbsp;]]&nbsp;)&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span>参数&nbsp;&nbsp;</span></li><li class="alt"><span>-----------------------------------------------------------&nbsp;&nbsp;</span></li><li><span>value&nbsp;&nbsp;</span></li><li class="alt"><span>待编码的&nbsp;value&nbsp;，除了resource&nbsp;类型之外，可以为任何数据类型。&nbsp;&nbsp;</span></li><li><span>所有字符串数据的编码必须是&nbsp;UTF-8。&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span>options&nbsp;&nbsp;</span></li><li class="alt"><span>由以下常量组成的二进制掩码：&nbsp;JSON_HEX_QUOT,&nbsp;JSON_HEX_TAG,&nbsp;JSON_HEX_AMP,&nbsp;JSON_HEX_APOS,&nbsp;JSON_NUMERIC_CHECK,&nbsp;JSON_PRETTY_PRINT,&nbsp;JSON_UNESCAPED_SLASHES,&nbsp;JSON_FORCE_OBJECT,&nbsp;JSON_PRESERVE_ZERO_FRACTION,&nbsp;JSON_UNESCAPED_UNICODE,&nbsp;JSON_PARTIAL_OUTPUT_ON_ERROR。&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>depth&nbsp;&nbsp;</span></li><li><span>设置最大深度。&nbsp;必须大于0。&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span>返回值&nbsp;&nbsp;</span></li><li class="alt"><span>-----------------------------------------------------------&nbsp;&nbsp;</span></li><li><span>成功则返回&nbsp;JSON&nbsp;编码的&nbsp;<span class="keyword">string</span><span>&nbsp;或者在失败时返回&nbsp;FALSE&nbsp;。&nbsp;&nbsp;</span></span></li></ol></div><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-family: &quot;Microsoft YaHei&quot;, &quot;SF Pro Display&quot;, Roboto, Noto, Arial, &quot;PingFang SC&quot;, sans-serif; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow-wrap: break-word; font-variant-ligatures: common-ligatures;">注意：上面对参数明确说明（所有字符串数据的编码必须是 UTF-8）</p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-family: &quot;Microsoft YaHei&quot;, &quot;SF Pro Display&quot;, Roboto, Noto, Arial, &quot;PingFang SC&quot;, sans-serif; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow-wrap: break-word; font-variant-ligatures: common-ligatures;">可能正是因为这一点导致我输出错误，但是我怎么知道，会是这个错误呢？因为我发现有一个这个函数<code style="box-sizing: border-box; outline: 0px; margin: 0px; padding: 2px 4px; font-family: &quot;Source Code Pro&quot;, &quot;DejaVu Sans Mono&quot;, &quot;Ubuntu Mono&quot;, &quot;Anonymous Pro&quot;, &quot;Droid Sans Mono&quot;, Menlo, Monaco, Consolas, Inconsolata, Courier, monospace, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, sans-serif; font-size: 14px; line-height: 22px; color: rgb(199, 37, 78); background-color: rgb(249, 242, 244); border-radius: 2px; overflow-wrap: break-word;">json_last_error</code></p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-family: &quot;Microsoft YaHei&quot;, &quot;SF Pro Display&quot;, Roboto, Noto, Arial, &quot;PingFang SC&quot;, sans-serif; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow-wrap: break-word; font-variant-ligatures: common-ligatures;">我们看下这个函数</p><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>(PHP&nbsp;5&nbsp;&gt;=&nbsp;5.3.0,&nbsp;PHP&nbsp;7)&nbsp;&nbsp;</span></span></li><li><span>json_last_error&nbsp;&mdash;&nbsp;返回最后发生的错误&nbsp;&nbsp;</span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span>说明&nbsp;&nbsp;</span></li><li class="alt"><span>-----------------------------------------------------------&nbsp;&nbsp;</span></li><li><span><span class="keyword">int</span><span>&nbsp;json_last_error&nbsp;(&nbsp;</span><span class="keyword">void</span><span>&nbsp;)&nbsp;&nbsp;</span></span></li><li class="alt"><span>如果有，返回&nbsp;JSON&nbsp;编码解码时最后发生的错误。&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>参数&nbsp;&nbsp;</span></li><li><span>-----------------------------------------------------------&nbsp;&nbsp;</span></li><li class="alt"><span>此函数没有参数。&nbsp;&nbsp;</span></li><li><span>&nbsp;&nbsp;</span></li><li class="alt"><span>返回值&nbsp;&nbsp;</span></li><li><span>-----------------------------------------------------------&nbsp;&nbsp;</span></li><li class="alt"><span>返回一个整型（integer），这个值会是以下的常量之一：&nbsp;&nbsp;</span></li></ol></div><div class="codeText"><div class="codeHead">C#代码</div><ol start="1" class="dp-c"><li class="alt"><span><span>例如：&nbsp;&nbsp;</span></span></li><li><span>echo&nbsp;json_encode(array(<span class="string">'error'</span><span>&nbsp;=&gt;&nbsp;</span><span class="string">'0'</span><span>,&nbsp;</span><span class="string">'message'</span><span>&nbsp;=&gt;&nbsp;</span><span class="string">'没有错误'</span><span>));&nbsp;&nbsp;</span></span></li><li class="alt"><span>var_dump(json_last_error());&nbsp;&nbsp;</span></li><li><span><span class="comment">//这里也可以是json_decode</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;</span></li><li><span><span class="comment">//错误码对照</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>0&nbsp;JSON_ERROR_NONE&nbsp;&nbsp;</span></li><li><span>1&nbsp;JSON_ERROR_DEPTH&nbsp;&nbsp;</span></li><li class="alt"><span>2&nbsp;JSON_ERROR_STATE_MISMATCH&nbsp;&nbsp;</span></li><li><span>3&nbsp;JSON_ERROR_CTRL_CHAR&nbsp;&nbsp;</span></li><li class="alt"><span>4&nbsp;JSON_ERROR_SYNTAX&nbsp;&nbsp;</span></li><li><span>5&nbsp;JSON_ERROR_UTF8&nbsp;&nbsp;</span></li><li class="alt"><span>6&nbsp;JSON_ERROR_RECURSION&nbsp;&nbsp;</span></li><li><span>7&nbsp;JSON_ERROR_INF_OR_NAN&nbsp;&nbsp;</span></li><li class="alt"><span>8&nbsp;JSON_ERROR_UNSUPPORTED_TYPE&nbsp;&nbsp;</span></li></ol></div><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; font-family: &quot;Microsoft YaHei&quot;, &quot;SF Pro Display&quot;, Roboto, Noto, Arial, &quot;PingFang SC&quot;, sans-serif; font-size: 16px; color: rgb(77, 77, 77); line-height: 26px; overflow-wrap: break-word; font-variant-ligatures: common-ligatures;">我返回的是 int 5，对照返回错误码，自然而然就是（异常的 UTF-8 字符，也许是因为不正确的编码）这个错误了，知道错误后，然后检查你要返回的数据，再做下处理就OK了。</p>
]]>
</description>
</item><item>
<link>http://pic1.liuxinxiu.com:80/s//#blogcomment</link>
<title><![CDATA[[评论] php json 处理gbk转码utf-8问题（ json_encode转换数组，值为null）]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://pic1.liuxinxiu.com:80/s//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>