原理很简单,因为gb2312/gbk是中文两字节,这两个字节是有取值范围的,而utf-8中汉字是三字节,同样每个字节也有取值范围,而英文不管在何种编码情况下,都是小于128,只占用一个字节,全角除外.
在PHP处理页面的时候,我们对于字符集的转换都是采用了iconv或者mb_convert等函数,但这其实是有一个前提的,即我们事先得知道in和out是什么样的编码,我们才能进行正确的转换.
下面这个函数,就可以在不知道源字符串编码的情况下,自动判断其编码并进行转换,虽然只支持UTF8编码和GB2312编码,但对于国内绝大多数网站来说,已经够用了,代码如下:
<?php function safeEncoding($string, $outEncoding = 'UTF-8') { $encoding = "UTF-8"; for ($i = 0; $i < 128) continue; if ((ord($string{$i}) & 224) == 224) { //第一个字节判断通过 $char = $string{++$i}; if ((ord($char) & 128) == 128) { //第二个字节判断通过 $char = $string{++$i}; if ((ord($char) & 128) == 128) { $encoding = "UTF-8"; break; } } } if ((ord($string{$i}) & 192) == 192) { //第一个字节判断通过 $char = $string{++$i}; if ((ord($char) & 128) == 128) { //第二个字节判断通过 $encoding = "GB2312"; break; } } } if (strtoupper($encoding) == strtoupper($outEncoding)) return $string; else return iconv($encoding, $outEncoding, $string); } ?>
识别汉字编码,因为YBlog用的是utf-8,如果引用通告发过来的是gb2312的编码的话,需要可以识别并完成编码转换,代码如下:
<?php function safeEncoding($string, $outEncoding = 'UTF-8') { $encoding = "UTF-8"; for ($i = 0; $i < strlen($string); $i++) { if (ord($string{$i}) < 128) continue; if ((ord($string{$i}) & 224) == 224) { //第一个字节判断通过 $char = $string{++$i}; if ((ord($char) & 128) == 128) { //第二个字节判断通过 $char = $string{++$i}; if ((ord($char) & 128) == 128) { $encoding = "UTF-8"; break; } } } if ((ord($string{$i}) & 192) == 192) { //第一个字节判断通过 $char = $string{++$i}; if ((ord($char) & 128) == 128) { //第二个字节判断通过 $encoding = "GB2312"; break; } } } if (strtoupper($encoding) == strtoupper($outEncoding)) return $string; else return iconv($encoding, $outEncoding, $string); } ?>

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1
強大的PHP整合開發環境

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器