原理は、中国語の文字を 16 進数に変換し、特定の規則に従って文字列を結合して、文字のエンコードとデコードを実現し、URL データ送信時の文字の整合性と互換性を確保することです。主に、中国語の文字のエンコード条件について説明します。
1. FireFox ブラウザは中国語の文字をエンコードします
Firefox ブラウザに中国語の文字を入力すると、次のように URL エンコードが自動的に実装されます
Enter キーを押す前
Enter キーを押した後
2. urlencode() 関数の原理
urlencode()関数を使用する URL 文字列のエンコーディング。ここでは主に中国語の文字のエンコーディングについて説明します。
例は次のとおりです。
コードをコピーします。コードは次のとおりです:
echo urlencode('兄に執着しないでください');//出力: ��Ѫ������
urlencode() 関数の原理は、まず中国語の文字を 16 進数に変換し、次に各文字の前に識別子 % を追加することです。この原理を理解した後、カスタマイズされた URL エンコード関数を実装できます。コードは次のとおりです。 >
コードは次のとおりです: $string = "私に執着しないでください"; length = strlen($string);
echo $string;$result = array() ;
//Decimal
for($i=0;$iif(ord($string[$i])>127){
$ result[] = ord($string[$i]).' '.ord($string[ $i]) ;
}
}
var_dump($result);
//16 進数
$strings = array();
foreach($result as $v){
$dec =explode(" ",$v);
$strings[] = "% ".dechex($dec[0])." "."%".dechex($dec[1]); 🎜>}
var_dump($strings)
上記のコードについては、「PHP における漢字変換の原理の解析」の記事「漢字の 16 進数への変換原理の解析」で詳しく説明しています。漢字を16進数に変換すると同時に、各文字の前に特別な識別子%を追加することで、urlencode()関数の機能を実現します。 出力結果は次のようになります。
次に、出力結果を文字と比較します。上記のように、urlencode() を使用して直接エンコードされます: ��Ѫ������
$string = '��Ѫ�����'; strlen($string); $hexs = array(); for($i=0;$iif($string[$i] == ' %'){ $hexs[] = $string[ $i].$string[ $i]
}}
$num = count($hexs); ($i=0;$iecho chr( hexdec($hexs[$i])).chr(hexdec($hexs[ $i]));
上記のコード例では、まず文字列の規則に従って各文字を抽出し、次に hexdec() 関数を使用して 16 進数を 10 進数に変換し、次に chr() を使用します。 10 進数を文字に変換する関数を使用して、16 進数から文字への変換を実現します。出力は次のとおりです
4、urldecode() および urlencode() 関数の説明
(PHP 3、PHP 4、PHP 5)
urlencode -- URL をエンコード stringDescriptionstring urlencode (string str)文字列を返します。この文字列内の -_ 文字を除くすべての非英数字は置き換えられます。パーセント記号 (%) の後に 2 つの 16 進数が続き、スペースはプラス記号 ( ) としてエンコードされます。このエンコーディングは、WWW フォーム POST データのエンコーディングと同じであり、application/x-www-form-urlencoded メディア タイプと同じエンコーディングです。歴史的な理由により、このエンコードは、スペースをプラス記号 ( ) としてエンコードする点で RFC1738 エンコード (rawurlencode() を参照) とは異なります。この関数は、文字列のエンコードと URL のリクエスト部分での使用を容易にし、次のページ