phpでは、urlencode()関数は中国語を文字列エンコードに変換するもので、ブラウザで開いたときに中国語のURLが文字化けしたり間違ったりすることはありません。urlencode()を使用したエンコードをいくつか紹介します。具体的な詳細。
URLコード
(PHP 4、PHP 5)
urlencode — URL 文字列をエンコードする
バグを報告する 説明
文字列 urlencode (文字列 $str)
この機能を使用すると、文字列をエンコードして URL のリクエスト部分で使用することが簡単になり、次のページに変数を渡すことも簡単になります。
バグパラメータを報告する
ストラ
エンコードする文字列。
戻り値のバグを報告する
-_ を除くすべての非英数字文字がパーセント記号 (%) に置き換えられ、その後に 2 つの 16 進数が続き、スペースがプラス記号 (+) としてエンコードされた文字列を返します。このエンコーディングは、WWW フォーム POST データのエンコーディングと同じであり、application/x-www-form-urlencoded メディア タイプと同じエンコーディングです。歴史的な理由により、このエンコードは、スペースをプラス記号 (+) としてエンコードする点で RFC1738 エンコード (rawurlencode() を参照) とは異なります。
URLエンコードとは:
このツールは、それぞれエンコードとデコードの 2 つのメソッドを実装します。
中国語 -> GB2312 のエンコード -> %D6%D0%CE%C4
中国語 -> UTF-8 エンコード -> %E4%B8%AD%E6%96%87
HTML で URL エンコード:
GB2312としてエンコードされたHTMLファイルでは、
/中文.rar -> ブラウザは自動的に /%D6%D0%CE%C4.rar に変換します。
注: Firefox はデフォルトで UTF-8 エンコードで URL を送信するため、GB2312 エンコードで中国語の URL を適切にサポートしていませんが、私が試した ftp:// プロトコルは問題ないと考えられます。 Firefox
/中文.rar -> ブラウザは自動的に /%E4%B8%AD%E6%96%87.rar
に変換します。
コードをコピー | |
//GB2312のエンコード
echo urlencode("中文-_. ")."n"; //%D6%D0%CE%C4-_.+ |
urlencode と rawurlencode の違い:
urlencode はスペースをプラス記号 (+) としてエンコードします
rawurlencode はスペースをプラス記号 (%20) としてエンコードします
UTF-8 エンコードを使用したい場合は、2 つの方法があります:
1. ファイルを UTF-8 ファイルとして保存し、urlencode または rawurlencode を直接使用します。
2. mb_convert_encoding 関数を使用します。
コードをコピー | |
$url = ‘/中文.rar’;
echo urlencode(mb_convert_encoding($url, ‘utf-8’, ‘gb2312’)).”n”; |
コードをコピー | |
関数parseurl($url=””)
{ |
コードは次のとおりです | コードをコピー |
%E4%B8%AD%E6%96%87-_.%20%E4%B8%AD%E6%96%87-_.%20 |
encodeURI は、「:」、「/」、「;」、「?」、「@」、およびその他の特殊文字をエンコードしません。
コードは次のとおりです | コードをコピー |
/%E4%B8%AD%E6%96%87.rarhttp%3A%2F%2Fud03.kinoko.name%2F%E4%B8%AD%E6%96%87.rar |
注:
注: HTML エンティティに一致する変数には注意してください。 &、©、£ などの文字はブラウザによって解析され、予期される変数名の代わりに実際のエンティティが使用されます。これは明らかな混乱であり、W3C は数年にわたって人々にこのことについて警告してきました。参照アドレス: » http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2。
PHP は、arg_separator.ini ディレクティブを通じて、パラメーター区切り文字を W3C が推奨するセミコロンに変更することをサポートしています。残念ながら、ほとんどのユーザー エージェントはフォーム データをセミコロン区切り形式で送信しません。より簡単な解決策は、区切り文字として & の代わりに & を使用することです。このために PHP の arg_separator を変更する必要はありません。このままにして、htmlentities() または htmlspecialchars() を使用して URL をエンコードします。