PHP で URL をエンコードするには、urlencode() または rawurlencode() を使用できます。この 2 つの違いは、前者はスペースを '+' としてエンコードするのに対し、後者はスペースを '%20' としてエンコードすることです。ただし、エンコード時に URL の一部のみをエンコードする必要があることに注意してください。エンコードしないと、URL 内のコロンとバックスラッシュもエスケープされます。以下に詳細な説明を示します:
string urlencode (string str) -_ を除く、この文字列内のすべての非英数字は、その後に続く 2 つの数字に置き換えられます。スペースはプラス記号 (+) としてエンコードされます。このエンコーディングは、WWW フォーム POST データのエンコーディングと同じであり、application/x-www-form-urlencoded のメディア タイプ エンコーディングと同じです。歴史的な理由により、このエンコードは、スペースをプラス記号 (+) としてエンコードする点で RFC1738 エンコード (rawurlencode() を参照) とは異なります。この関数により、文字列のエンコードと URL のリクエスト部分での使用が容易になり、次のページへの変数の受け渡しも容易になります。 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() の例 | echo ''; ?>
string urlencode (string str) 文字列を返します。この文字列内の -_ を除く英数字以外の文字はすべてパーセント記号に置き換えられます。 (%) の後に 2 つの 16 進数が続きます。 RFC 1738 で説明されているこのエンコーディングは、リテラル文字が特別な URL 区切り文字として解釈されないように保護し、トランスポート メディア (一部のメール システムなど) で使用される文字変換によって URL 形式が文字化けしないようにすることを目的としています。たとえば、FTP URL にパスワードを含める場合: | 例 1. rawurlencode() 例 1 | echo ''; ?>
または、必要に応じて渡す 情報を渡す URL の PATH_INFO コンポーネント: | 例 2. rawurlencode() 例 2 | echo ''; ?>
デコードするときは、対応する urldecode() と rawurldecode() を使用できます。同様に、rawurldecode() はプラス記号 ('+') をスペースにデコードしませんが、urldecode() は使用できます。 詳細な例を次に示します。 string urldecode (string str) 指定されたエンコードされた文字列内の任意の %## をデコードします。デコードされた文字列を返します。 例 1. urldecode() の例
$a =explode('&', $QUERY_STRING); while ($i & lt; count ($a)) { $b = split('=', $a[$i]); echo 'パラメータの値 ', htmlspecialchars(urldecode($b[0])), ' は ', htmlspecialchars (urldecode ($b[1])), " n"; パーセント記号 (%) に続く 2 つの 16 進数の文字列がリテラル文字に置き換えられる文字列を返します。 。 例 1. Rawurldecode() の例 | echo rawurldecode('foo%20bar%40baz') // foo bar@baz ?& gt;
ただし、urldecode() と rawurldecode() によってデコードされた文字列は UTF-8 形式でエンコードされることに注意してください。URL に中国語が含まれており、ページ設定が UTF-8 ではない場合は、デコードされた文字列を変換する必要があります。正常に表示できるようになりました! もう 1 つ問題があります。つまり、この時点では、取得された URL は %%nn n={0..F} の形式ではなく、%unnnn n={0..F} の形式になっています。 、urldecode() を使用しても rawurldecode() は正しくデコードできません。正しくデコードするには次の関数を使用する必要があります: function utf8RawUrlDecode ($source) { $decodedStr = ""; $pos = 0; $len = strlen ($source ); while ($pos < $len) { $charAt = substr ($source, $pos, 1); if ($charAt == '%') { $pos++ ; $ charat = substr($ source、$ pos、1); 4);
|
|
|