Heim  >  Artikel  >  Backend-Entwicklung  >  一段将GB编码转换为utf8的代码_PHP

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

WBOY
WBOYOriginal
2016-06-01 12:34:47893Durchsuche
一段将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)输出英文。
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP生成静态页面_PHPNächster Artikel:php的字符编码转换工具_PHP