詳細な説明は次のとおりです。 ///\
string urlencode ( string str)
この文字列内の -_ を除くすべての英数字以外の文字は、その後に続くパーセント記号 (%) に置き換えられます。 2 つの 16 進数とスペースはプラス記号 ( ) としてエンコードされます。このエンコーディングは、WWW フォーム POST データのエンコーディングと同じであり、application/x-www-form-urlencoded メディア タイプと同じエンコーディングです。歴史的な理由により、このエンコードは、スペースをプラス記号 ( ) としてエンコードする点で RFC1738 エンコード (rawurlencode() を参照) とは異なります。この関数により、文字列のエンコードと URL のリクエスト部分での使用が容易になり、変数を次のページに渡すことも容易になります。 例 1. urlencode() 例
コードをコピー コードは次のとおりです:
echo '?>
注: HTML エンティティと一致する変数には注意してください。 &、©、£ などの文字はすべてブラウザによって解析され、予期される変数名が実際のエンティティに置き換えられます。これは明らかな混乱であり、W3C は数年前からこのことについて人々に警告してきました。参照アドレス: http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2 PHP は、arg_separator .ini ディレクティブを通じて、パラメータ区切り文字を W3C が推奨するセミコロンに変更することをサポートしています。残念ながら、ほとんどのユーザー エージェントはフォーム データをセミコロン区切り形式で送信しません。より簡単な解決策は、区切り文字として & の代わりに & を使用することです。このために PHP の arg_separator を変更する必要はありません。そのままにして、htmlentities(urlencode($data)) を使用して URL をエンコードします。
例 2. urlencode() と htmlentities() の例
コードをコピー コードは次のとおりです:
< ;?php
echo ''
string urlencode (string str)
-_ を除くすべての非英数字をパーセント記号 (%) とその後に続く 2 つの 16 進数で置き換えた文字列を返します。 RFC 1738 で説明されているこのエンコーディングは、リテラル文字が特別な URL 区切り文字として解釈されないように保護し、トランスポート メディア (一部のメール システムなど) で使用される文字変換によって URL 形式が文字化けしないようにすることを目的としています。たとえば、FTP URL にパスワードを含める場合:
例 1. rawurlencode() 例 1
コードをコピーします コードは次のとおりです。次のように:
echo '';
?>
または、URL の PATH_INFO コンポーネントを通じて情報を渡したい場合:
例 2. rawurlencode() 例 2
コードをコピー コードは次のとおりです:
echo ''
?>
at デコードするときは、対応する urldecode() と rawurldecode() を使用できます。同様に、rawurldecode() はプラス記号 (' ') をスペースにデコードしませんが、urldecode() はデコードできます。 。 詳細な例を次に示します。
string urldecode ( string str)
指定されたエンコードされた文字列内の任意の %## をデコードします。デコードされた文字列を返します。 例 1. urldecode() の例
コードをコピー コードは次のとおりです。
$ a = 爆発 ('&', $QUERY_STRING);
$i = 0;
while ($i < count($a)) {
$b = split('=', $a) [$i ]);
echo 'パラメータの値 ', htmlspecialchars(urldecode($b[0])),
' は ', htmlspecialchars(urldecode($b[1])), "< br /> ;n";
$i ;
}
?>
string rawurldecode ( string str) 文字列、パーセント記号 ( % を返します) ) に続く 2 つの 16 進数はリテラル文字に置き換えられます。
例 1. rawurldecode() 例
コードをコピー コードは次のとおりです:
echo rawurldecode('foo bar@baz') // foo bar@baz
?>
ただし、urldecode() と rawurldecode() によってデコードされた文字列は UTF-8 形式でエンコードされることに注意してください。URL に中国語が含まれており、ページ設定が UTF-8 ではない場合、デコードされた文字列は次のとおりである必要があります。正常に表示される前に変換されてしまいます。
もう 1 つ問題があります。つまり、取得された URL は %%nn n={0..F} の形式ではなく、%unnnn n={0..F} の形式になっています。この場合、urldecode() を使用しても rawurldecode() は正しくデコードできません。正しくデコードするには次の関数を使用する必要があります:
コードをコピー コードは次のとおりです。
関数 utf8RawUrlDecode ($source)
{
$decodedStr = "";
$len = strlen ($source);
while ($pos < $len) {
$charAt = substr ($source, $pos, 1);
if ($charAt == '%') {
$pos ;
$charAt = substr ($source, $pos, 1);
if ($charAt == 'u') {
// Unicode 文字を取得しました
$pos
$unicodeHexVal = substr ($source, $ pos, 4);
$entity = "" 。 = utf8_encode ($entity);
$pos = 4;
}
else {
// エスケープされた ASCII 文字があります
$hexVal = substr ($source, $pos, 2 );
$decodedStr .= chr (hexdec ($hexVal));
}
} else {
$decodedStr .= $charAt; pos ;
}
}
return $decodedStr;