PHPのエンコードとデコードの詳しい解説
。この記事では主に、PHP で大きなことができる PHP のエンコードとデコードの詳細な説明を紹介します。この記事では、ASCII のエンコードとデコード、URL のエンコードとデコード、Base64 のエンコードとデコード、HTML エンティティのエンコードとデコード、バイナリ、8 進数について説明します。 、10 進数、および 16 進数の変換やその他のコンテンツについては、必要な友達が参照できます
前に書いてください
PHP は素晴らしいこともできます。PHP の構文機能と関連する関数ライブラリの古典的な使い方をまとめました。実際に大きな違いをもたらすことはできないかもしれませんが、これらの方法をマスターすると、仕事に少し役立ちます。みんなでブレインストーミングして、「PHP Can Do Great Things」をもっと盛り上げてください。転載元を明記してください(jb51.net)
2. はじめに
PHP は一般的なスクリプト言語です。その主な理由は、Web プログラムのほぼ 50% が PHP を使用していることです (不完全な統計)。 PHP は開発用に豊富な関数と API インターフェイスを提供しており、その強力な組み込み関数や拡張機能を非常に便利に使用できます。この記事は、主に利点をまとめた「PHP で大きなことを実現できる」シリーズの最初の記事です。 PHP のエンコード、デコード、基数変換の知識。
3. PHPのエンコードとデコード
1. ASCIIエンコードとデコード
ASCII(発音:英語発音:/ˈæski/ ASS-kee、American Standard Code for Information Interchange、American Standard Code for Information Interchange)は、ラテン文字をベースとしたコンピュータコーディングシステムです。主に現代英語の表示に使用されますが、その拡張バージョン EASCII は他の西ヨーロッパ言語を部分的にサポートでき、国際標準 ISO/IEC 646 と同等です。 World Wide Web により ASCII が広く使用されるようになり、2007 年 12 月までに徐々に Unicode に置き換えられました。 https://zh.wikipedia.org/zh/ASCII
PHP の基本関数には ASCII エンコードおよびデコード関数が組み込まれており、ASCII エンコードおよびデコードを簡単に実行できます。
int ord (string $string) //文字列 string の最初の文字の ASCII コード値を返します。
String chr (int $ascii) //指定されたasciiに対応する単一の文字を返します。
コードは次のとおりです:
$str = '中国へようこそ';
関数getNum($string){
$針 = 0;
$num = '';
while (isset($string[$needle])) {
$num .= $num==0?'':' ';
$num .= ord($string[$needle]);
$needle++;
}
$num を返します;
}
関数getChar($num){
$num_arr =explode(' ', $num);
$string = '';
foreach ($num_arr as $value) {
$string .= chr($value);
}
$string を返す;
}
echo "文字をASCIIコードnに変換";
echo getNum($str);
エコー「ン」;
echo "ASCII 文字 n";
echo getChar(getNum($str));
/* @OUTPUT
文字をASCIIコードに変換する
87 101 108 99 111 109 101 32 116 111 32 67 104 105 110 97
ASCIIコード文字
中国へようこそ
*/
?>
2. URLのエンコードとデコード
URL エンコードは、ブラウザーがフォーム入力をパッケージ化するために使用する形式です。ブラウザはフォームからすべての名前と値を取得し、それらを URL の一部として、または名前/値パラメータのエンコーディングとして個別にサーバーに送信します。たとえば、Web ページにアクセスすると、URL エンコードである % を含む文字列が多数存在します。
URLエンコードは通常UTF-8エンコード形式を使用するため、データ転送にはUTF-8形式を使用することをお勧めします。通常の意味での URL エンコードは、ASCII コードの 16 進数の前に % が付いているものとして理解でき、大文字と小文字の区別はありません。
コードは次のとおりです:
String urlencode(string $str) //この関数は、文字列のエンコードと URL のリクエスト部分での使用を容易にします。また、変数を次のページに渡すことも容易になります。スペースは + としてエンコードされます。
String urldecode(string $str) //指定されたエンコードされた文字列内の任意の %XX をデコードし、プラス記号 ('+') をスペース文字にデコードします。
String rawurlencode (string $str) //指定された文字を RFC 3986 に従ってエンコードし、スペースを %20 に変換します。
String rawurldecode (string $str) //この文字列内のパーセント記号 (%) の後に続く 2 つの 16 進数がリテラル文字に置き換えられる文字列を返します。 +はスペースに変換されません。
+ とスペースの変換処理を除いて、2 つの関数の使い方は同じです。rawurlencode はスペースを %20 に変換し、+ をスペースに変換しません。
コードは以下の通りです:
$str_arr = array(
「www.jb51.net」、
「http://www.jb51.net/」、
「PHP も素晴らしいことができます」、
'!@#$%^&*()_+=-~`[]{}|\;:'"<>,./?'
);
foreach ($str_arr as $key => $value) {
echo $value,"t->t",urlencode($value),"n";
}
/* @OUTPUT
www.jb51.net -> www.jb51.net
http://www.jb51.net/ -> http%3A%2F%2Fwww.jb51.net%2F
PHP も素晴らしいことができます -> PHP%E4%B9%9F%E8%83%BD%E5%B9%B2%E5%A4%A7%E4%BA%8B
!@#$%^&*()_+=-~`[]{}|;:'"<>,./? -> %21%40%23%24%25%5E% 26%2A%28%29_%2B%3D-%7E%60%5B%5D%7B%7D%7C%5C%3B%3A%27%22%3C%3E%2C.%2F%3F
*/
?>
3. Base64エンコードとデコード
Base64は、64個の印刷可能な文字に基づくバイナリデータの表現方法です。 2 の 6 乗は 64 に等しいため、6 ビットごとが 1 つの単位となり、印刷可能な文字に対応します。 3 バイトは 24 ビットで、4 Base64 ユニットに対応します。つまり、3 バイトは 4 つの印刷可能文字で表す必要があります。電子メールの転送エンコードとして使用できます。使用される文字は、大文字と小文字が 26 文字、数字が 10 文字、プラス記号「+」、スラッシュ「/」の合計 64 文字で、接尾語として等号「=」が使用されます。完全な Base64 定義は、RFC 1421 および RFC 2045 にあります。エンコードされたデータは元のデータよりわずかに長く、元のデータの 4/3 になります。電子メールでは、RFC 822 に従って、76 文字ごとにキャリッジ リターンとライン フィードを追加する必要があります。エンコードされたデータ長は、元の長さの約 135.1% であると推定できます。 https://zh.wikipedia.org/zh/Base64
Stringbase64_encode(string $data) //base64を使用してデータをエンコードします。
string base64_decode (string $data [, bool $strict = false ]) //base64 でエンコードされたデータをデコードします。
ケース: HTML ページの img タグは、src 属性で Base64 エンコーディングを使用して画像を出力できるため、HTTP リクエストの数を減らすことができます。
コードをコピーします。コードは次のとおりです:
$string = file_get_content('3mc2.png');
エコー ';
/* @OUTPUT
UEhQ5Lmf6IO95Yqe5aSn5LqL
*/
?>
4. HTMLエンティティのエンコードとデコード
一部の文字は HTML で予約されており、特別な意味を持っています。たとえば、不等号「<」は HTML タグの先頭を定義するために使用されます。ブラウザにこれらの文字を正しく表示させたい場合は、HTML ソース コードに文字エンティティを挿入する必要があります。文字エンティティには、アンパサンド「&」とエンティティ名 (または「#」とエンティティ番号)、およびセミコロン「;」の 3 つの部分があります。 http://www.ascii.cl/htmlcodes.htm
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = “UTF-8″ [, bool $double_encode = true ]]] ) //次の HTML 特殊文字を含む HTML エンティティをエンコードします
1.「&」(アンパサンド)は「&」になります
2.ENT_NOQUOTESが設定されていない場合、'"'(ダブルクォーテーション)は'"'になります。
3. ENT_QUOTESが設定されている場合のみ、”””(シングルクォーテーション)は””(または”)になります。
4.「<」(未満)は「<」になります
5.「>」(より大きい)は「>」になります
string htmlspecialchars_decode (string $string [, int $flags = ENT_COMPAT | ENT_HTML401 ]) //この関数の機能は htmlspecialchars() のまったく逆です。特殊な HTML エンティティを通常の文字に変換します。
同じ機能を持つ関数 htmlentities/html_entity_decode もあります。この関数のペアは中国語の文字も HTML エンティティにエンコードし、文字化けを生成するため、エンコードとデコードには htmlspecialchars を使用することをお勧めします。
ケース: XSS クロスサイト スクリプティング攻撃を防ぐには、ユーザーが送信したデータを HTML エンティティに変換する必要があります。
コードは以下の通りです:
$_POST['message'] = 'テストメッセージ文字'">
について説明します。