ホームページ  >  記事  >  バックエンド開発  >  一段将GB编码转换为utf8的代码_PHP

一段将GB编码转换为utf8的代码_PHP

WBOY
WBOYオリジナル
2016-06-01 12:34:47857ブラウズ
一段将GB编码转换为utf8的代码

gb2utf8.php 文件如下:

<font color="#000000"><br><font face="新宋体" color="#007700">Class </font><font face="新宋体" color="#0000bb">GB2UTF8 <br></font><font face="新宋体"><font color="#007700">{ <br>var </font><font color="#0000bb">$gb</font><font color="#007700">;          </font></font><font face="新宋体"><font color="#ff8000">// 待转换的GB2312字符串 <br></font><font color="#007700">var </font><font color="#0000bb">$utf8</font><font color="#007700">;        </font></font><font face="新宋体"><font color="#ff8000">// 转换后的UTF8字符串 <br>    </font><font color="#007700">var </font><font color="#0000bb">$CodeTable</font><font color="#007700">;   </font></font><font face="新宋体"><font color="#ff8000">// 转换过程中使用的GB2312代码文件数组 <br>    </font><font color="#007700">var </font><font color="#0000bb">$ErrorMsg</font><font color="#007700">;    </font></font><font face="新宋体"><font color="#ff8000">// 转换过程之中的错误讯息 <br><br></font><font color="#007700">function </font><font color="#0000bb">GB2UTF8</font><font color="#007700">(</font><font color="#0000bb">$InStr</font><font color="#007700">=</font><font color="#dd0000">""</font></font><font face="新宋体"><font color="#007700">) <br>{ <br></font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">gb</font><font color="#007700">=</font><font color="#0000bb">$InStr</font></font><font face="新宋体"><font color="#007700">; <br></font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">SetGb2312</font></font><font face="新宋体"><font color="#007700">(); <br>(</font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">gb</font><font color="#007700">==</font><font color="#dd0000">""</font><font color="#007700">)?</font><font color="#0000bb">0</font><font color="#007700">:</font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">Convert</font></font><font face="新宋体"><font color="#007700">(); <br>} <br><br>function </font><font color="#0000bb">SetGb2312</font><font color="#007700">(</font><font color="#0000bb">$InStr</font><font color="#007700">=</font><font color="#dd0000">"gb2312.txt"</font></font><font face="新宋体" color="#007700">) <br>{                  </font><font face="新宋体"><font color="#ff8000">// 设置gb2312代码文件,默认为gb2312.txt <br></font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">ErrorMsg</font><font color="#007700">=</font><font color="#dd0000">""</font></font><font face="新宋体"><font color="#007700">; <br></font><font color="#0000bb">$tmp</font><font color="#007700">=@</font><font color="#0000bb">file</font><font color="#007700">(</font><font color="#0000bb">$InStr</font></font><font face="新宋体"><font color="#007700">); <br>        if (!</font><font color="#0000bb">$tmp</font></font><font face="新宋体"><font color="#007700">) { <br>            </font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">ErrorMsg</font><font color="#007700">=</font><font color="#dd0000">"No GB2312"</font></font><font face="新宋体"><font color="#007700">; <br>            return </font><font color="#0000bb">false</font></font><font face="新宋体"><font color="#007700">; <br>            } <br></font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">CodeTable</font></font><font face="新宋体"><font color="#007700">=array(); <br>while(list(</font><font color="#0000bb">$key</font><font color="#007700">,</font><font color="#0000bb">$value</font><font color="#007700">)=</font><font color="#0000bb">each</font><font color="#007700">(</font><font color="#0000bb">$tmp</font></font><font face="新宋体"><font color="#007700">)) { <br></font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">CodeTable</font><font color="#007700">[</font><font color="#0000bb">hexdec</font><font color="#007700">(</font><font color="#0000bb">substr</font><font color="#007700">(</font><font color="#0000bb">$value</font><font color="#007700">,</font><font color="#0000bb">0</font><font color="#007700">,</font><font color="#0000bb">6</font><font color="#007700">))]=</font><font color="#0000bb">substr</font><font color="#007700">(</font><font color="#0000bb">$value</font><font color="#007700">,</font><font color="#0000bb">7</font><font color="#007700">,</font><font color="#0000bb">6</font></font><font face="新宋体"><font color="#007700">); <br>} <br>} <br>  <br>function </font><font color="#0000bb">Convert</font></font><font face="新宋体" color="#007700">() <br>{                   </font><font face="新宋体"><font color="#ff8000">// 转换GB2312字符串到UTF8字符串,需预先设置$gb <br></font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">utf8</font><font color="#007700">=</font><font color="#dd0000">""</font></font><font face="新宋体"><font color="#007700">; <br>if(!</font><font color="#0000bb">trim</font><font color="#007700">(</font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">gb</font><font color="#007700">) || </font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">ErrorMsg</font><font color="#007700">!=</font><font color="#dd0000">""</font></font><font face="新宋体"><font color="#007700">) { <br>return (</font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">utf8</font><font color="#007700">=</font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">ErrorMsg</font></font><font face="新宋体"><font color="#007700">); <br>} <br>        </font><font color="#0000bb">$str</font><font color="#007700">=</font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">gb</font></font><font face="新宋体"><font color="#007700">; <br><br>while(</font><font color="#0000bb">$str</font></font><font face="新宋体"><font color="#007700">) { <br>if (</font><font color="#0000bb">ord</font><font color="#007700">(</font><font color="#0000bb">substr</font><font color="#007700">(</font><font color="#0000bb">$str</font><font color="#007700">,</font><font color="#0000bb">0</font><font color="#007700">,</font><font color="#0000bb">1</font><font color="#007700">))></font><font color="#0000bb">127</font></font><font face="新宋体"><font color="#007700">) <br>{ <br></font><font color="#0000bb">$tmp</font><font color="#007700">=</font><font color="#0000bb">substr</font><font color="#007700">(</font><font color="#0000bb">$str</font><font color="#007700">,</font><font color="#0000bb">0</font><font color="#007700">,</font><font color="#0000bb">2</font></font><font face="新宋体"><font color="#007700">); <br></font><font color="#0000bb">$str</font><font color="#007700">=</font><font color="#0000bb">substr</font><font color="#007700">(</font><font color="#0000bb">$str</font><font color="#007700">,</font><font color="#0000bb">2</font><font color="#007700">,</font><font color="#0000bb">strlen</font><font color="#007700">(</font><font color="#0000bb">$str</font></font><font face="新宋体"><font color="#007700">)); <br></font><font color="#0000bb">$tmp</font><font color="#007700">=</font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">U2UTF8</font><font color="#007700">(</font><font color="#0000bb">hexdec</font><font color="#007700">(</font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">CodeTable</font><font color="#007700">[</font><font color="#0000bb">hexdec</font><font color="#007700">(</font><font color="#0000bb">bin2hex</font><font color="#007700">(</font><font color="#0000bb">$tmp</font><font color="#007700">))-</font><font color="#0000bb">0x8080</font></font><font face="新宋体"><font color="#007700">])); <br>for(</font><font color="#0000bb">$i</font><font color="#007700">=</font><font color="#0000bb">0</font><font color="#007700">;</font><font color="#0000bb">$i</font><font color="#007700"><font color="#0000bb">strlen </font><font color="#007700">(</font><font color="#0000bb">$tmp</font><font color="#007700">);</font><font color="#0000bb">$i</font><font color="#007700">+=</font><font color="#0000bb">3</font></font><font face="新宋体"><font color="#007700">) <br></font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">utf8</font><font color="#007700">.=</font><font color="#0000bb">chr</font><font color="#007700">(</font><font color="#0000bb">substr</font><font color="#007700">(</font><font color="#0000bb">$tmp</font><font color="#007700">,</font><font color="#0000bb">$i</font><font color="#007700">,</font><font color="#0000bb">3</font></font><font face="新宋体"><font color="#007700">)); <br>} <br>else <br>{ <br></font><font color="#0000bb">$tmp</font><font color="#007700">=</font><font color="#0000bb">substr</font><font color="#007700">(</font><font color="#0000bb">$str</font><font color="#007700">,</font><font color="#0000bb">0</font><font color="#007700">,</font><font color="#0000bb">1</font></font><font face="新宋体"><font color="#007700">); <br></font><font color="#0000bb">$str</font><font color="#007700">=</font><font color="#0000bb">substr</font><font color="#007700">(</font><font color="#0000bb">$str</font><font color="#007700">,</font><font color="#0000bb">1</font><font color="#007700">,</font><font color="#0000bb">strlen</font><font color="#007700">(</font><font color="#0000bb">$str</font></font><font face="新宋体"><font color="#007700">)); <br></font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">utf8</font><font color="#007700">.=</font><font color="#0000bb">$tmp</font></font><font face="新宋体"><font color="#007700">; <br>} <br>} <br>return </font><font color="#0000bb">$this</font><font color="#007700">-></font><font color="#0000bb">utf8</font></font><font face="新宋体"><font color="#007700">; <br>} <br><br><br>function </font><font color="#0000bb">U2UTF8</font><font color="#007700">(</font><font color="#0000bb">$InStr</font></font><font face="新宋体"><font color="#007700">) <br>{ <br>for(</font><font color="#0000bb">$i</font><font color="#007700">=</font><font color="#0000bb">0</font><font color="#007700">;</font><font color="#0000bb">$i</font><font color="#007700"><font color="#0000bb">count</font><font color="#007700">(</font><font color="#0000bb">$InStr</font><font color="#007700">);</font><font color="#0000bb">$i</font></font><font face="新宋体"><font color="#007700">++) <br></font><font color="#0000bb">$str</font><font color="#007700">=</font><font color="#dd0000">""</font></font><font face="新宋体"><font color="#007700">; <br>if (</font><font color="#0000bb">$InStr </font><font color="#007700"><font color="#0000bb">0x80</font></font><font face="新宋体"><font color="#007700">) { <br></font><font color="#0000bb">$str</font><font color="#007700">.=</font><font color="#0000bb">ord</font><font color="#007700">(</font><font color="#0000bb">$InStr</font></font><font face="新宋体"><font color="#007700">); <br>} <br>else if (</font><font color="#0000bb">$InStr </font><font color="#007700"><font color="#0000bb">0x800</font></font><font face="新宋体"><font color="#007700">) { <br></font><font color="#0000bb">$str</font><font color="#007700">.=(</font><font color="#0000bb">0xC0 </font><font color="#007700">| </font><font color="#0000bb">$InStr</font><font color="#007700">>></font><font color="#0000bb">6</font></font><font face="新宋体"><font color="#007700">); <br></font><font color="#0000bb">$str</font><font color="#007700">.=(</font><font color="#0000bb">0x80 </font><font color="#007700">| </font><font color="#0000bb">$InStr </font><font color="#007700">& </font><font color="#0000bb">0x3F</font></font><font face="新宋体"><font color="#007700">); <br>} <br>else if (</font><font color="#0000bb">$InStr </font><font color="#007700"><font color="#0000bb">0x10000</font></font><font face="新宋体"><font color="#007700">) { <br></font><font color="#0000bb">$str</font><font color="#007700">.=(</font><font color="#0000bb">0xE0 </font><font color="#007700">| </font><font color="#0000bb">$InStr</font><font color="#007700">>></font><font color="#0000bb">12</font></font><font face="新宋体"><font color="#007700">); <br></font><font color="#0000bb">$str</font><font color="#007700">.=(</font><font color="#0000bb">0x80 </font><font color="#007700">| </font><font color="#0000bb">$InStr</font><font color="#007700">>></font><font color="#0000bb">6 </font><font color="#007700">& </font><font color="#0000bb">0x3F</font></font><font face="新宋体"><font color="#007700">); <br></font><font color="#0000bb">$str</font><font color="#007700">.=(</font><font color="#0000bb">0x80 </font><font color="#007700">| </font><font color="#0000bb">$InStr </font><font color="#007700">& </font><font color="#0000bb">0x3F</font></font><font face="新宋体"><font color="#007700">); <br>} <br>else if (</font><font color="#0000bb">$InStr </font><font color="#007700"><font color="#0000bb">0x200000</font></font><font face="新宋体"><font color="#007700">) { <br></font><font color="#0000bb">$str</font><font color="#007700">.=(</font><font color="#0000bb">0xF0 </font><font color="#007700">| </font><font color="#0000bb">$InStr</font><font color="#007700">>></font><font color="#0000bb">18</font></font><font face="新宋体"><font color="#007700">); <br></font><font color="#0000bb">$str</font><font color="#007700">.=(</font><font color="#0000bb">0x80 </font><font color="#007700">| </font><font color="#0000bb">$InStr</font><font color="#007700">>></font><font color="#0000bb">12 </font><font color="#007700">& </font><font color="#0000bb">0x3F</font></font><font face="新宋体"><font color="#007700">); <br></font><font color="#0000bb">$str</font><font color="#007700">.=(</font><font color="#0000bb">0x80 </font><font color="#007700">| </font><font color="#0000bb">$InStr</font><font color="#007700">>></font><font color="#0000bb">6 </font><font color="#007700">& </font><font color="#0000bb">0x3F</font></font><font face="新宋体"><font color="#007700">); <br></font><font color="#0000bb">$str</font><font color="#007700">.=(</font><font color="#0000bb">0x80 </font><font color="#007700">| </font><font color="#0000bb">$InStr </font><font color="#007700">& </font><font color="#0000bb">0x3F</font></font><font face="新宋体"><font color="#007700">); <br>} <br>return </font><font color="#0000bb">$str</font></font><font face="新宋体"><font color="#007700">; <br>} <br>}</font><br></font></font><br></font></font></font></font></font></font>

测试文件如下:

<font color="#000000"><br><font face="新宋体"><font color="#0000bb">php <br>Header</font><font color="#007700">(</font><font color="#dd0000">"Content-type: image/png"</font></font><font face="新宋体"><font color="#007700">); <br></font><font color="#0000bb">$im </font><font color="#007700">= </font><font color="#0000bb">imagecreate</font><font color="#007700">(</font><font color="#0000bb">400</font><font color="#007700">,</font><font color="#0000bb">300</font></font><font face="新宋体"><font color="#007700">); <br></font><font color="#0000bb">$black </font><font color="#007700">= </font><font color="#0000bb">ImageColorAllocate</font><font color="#007700">(</font><font color="#0000bb">$im</font><font color="#007700">, </font><font color="#0000bb">0</font><font color="#007700">,</font><font color="#0000bb">0</font><font color="#007700">,</font><font color="#0000bb">0</font></font><font face="新宋体"><font color="#007700">); <br></font><font color="#0000bb">$white </font><font color="#007700">= </font><font color="#0000bb">ImageColorAllocate</font><font color="#007700">(</font><font color="#0000bb">$im</font><font color="#007700">, </font><font color="#0000bb">184</font><font color="#007700">,</font><font color="#0000bb">44</font><font color="#007700">,</font><font color="#0000bb">6</font></font><font face="新宋体"><font color="#007700">); <br>include(</font><font color="#dd0000">"gb2utf8.php"</font></font><font face="新宋体"><font color="#007700">); <br></font><font color="#0000bb">$obj</font><font color="#007700">=new </font><font color="#0000bb">gb2utf8</font></font><font face="新宋体"><font color="#007700">(); <br></font><font color="#0000bb">$obj</font><font color="#007700">-></font><font color="#0000bb">gb</font><font color="#007700">=</font><font color="#dd0000">"123abc中国456def测试正确"</font></font><font face="新宋体"><font color="#007700">; <br></font><font color="#0000bb">$obj</font><font color="#007700">-></font><font color="#0000bb">Convert</font></font><font face="新宋体"><font color="#007700">(); <br></font><font color="#0000bb">ImageTTFText</font><font color="#007700">(</font><font color="#0000bb">$im</font><font color="#007700">, </font><font color="#0000bb">20</font><font color="#007700">, </font><font color="#0000bb">0</font><font color="#007700">, </font><font color="#0000bb">5</font><font color="#007700">, </font><font color="#0000bb">50</font><font color="#007700">, </font><font color="#0000bb">$white</font><font color="#007700">, </font><font color="#dd0000">"SIMKAI.TTF"</font><font color="#007700">, </font><font color="#0000bb">$obj</font><font color="#007700">-></font><font color="#0000bb">utf8</font></font><font face="新宋体"><font color="#007700">); <br></font><font color="#0000bb">ImagePNG</font><font color="#007700">(</font><font color="#0000bb">$im</font></font><font face="新宋体"><font color="#007700">); <br></font><font color="#0000bb">ImageDestroy</font><font color="#007700">(</font><font color="#0000bb">$im</font><font color="#007700">);</font><br></font></font><br>

说明:
需要正确设置font文件,请先确认可以使用font直接(不使用gb2utf8)输出英文。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。