phpのurlencode()URL符号化関数を簡単に分析します。
URLEncodeの方式は、一般的に2つあります。一つは、伝統的なGB 2312ベースのEnccode(Baidu、Yisouなど)と、もう一つはUTF-8ベースのEnccode(Google、Yahooなどが使います。)です。本ツールはそれぞれ2つの方式のEncodeとDecodeを実現します。中国語->GB 2312のEnccode-%D 6%D 0%C 4中国語->UTF-8のEncde->%E 4%B 8%AD% E 6%96%87 HtmlのURLEncode:GB 2312のファイルに符号化しています。http://s.jb51.net/日本語.rar->ブラウザが自動的に->に変換されます。http://s.jb51.net/%D6%D0%CE%C4.rar 注意:FirefoxはGB 2312のEncodeの中国語URLに対応しています。よくないです。UTF-8符号化がデフォルトだから、URLを送ります。でも、ftp:/プロトコルは大丈夫です。試しました。これはFirefoxのbugと言えると思います。UTF-8とエンコードされたhtmlファイルの中:http://s.jb51.net/日本語.rar->ブラウザが自動的に->に変換されます。http://s.jb51.net/%E4%B8%AD%E6%96%87.rar PHPにおけるURLEncode:
<?php
//GB2312 Encode
echo urlencode(" -_. ")."
"; //%D6%D0%CE%C4-_.+
echo urldecode("%D6%D0%CE%C4-_. ")."
"; // -_.
echo rawurlencode(" -_. ")."
"; //%D6%D0%CE%C4-_.%20
echo rawurldecode("%D6%D0%CE%C4-_. ")."
"; // -_.
?>
は「-_.」を除く。以外のすべてのアルファベットでない数字は、百分号「%」と続く二桁の十六進数に置き換えられます。urlencodeとrawurlencodeの違い:urlencodeはスペースをプラス記号「+」と符号化し、rawurlencodeはスペースをプラス記号「%20」と符号化します。UTF-8のEnccodeを使うなら、二つの方法があります。一、ファイルをUTF-8ファイルに保存して、urlencode、rawurlencodeをそのまま使ってください。二、mb_を使うconvert_.encoding関数:
<?php
$url = 'http://s.jb51.net/ .rar';
echo urlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'))."
";
echo rawurlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'))."
";
//http%3A%2F%2Fs.jb51.net%2F%E4%B8%AD%E6%96%87.rar
?>
例:
<?php
function parseurl($url="")
{
$url = rawurlencode(mb_convert_encoding($url, 'gb2312', 'utf-8'));
$a = array("%3A", "%2F", "%40");
$b = array(":", "/", "@");
$url = str_replace($a, $b, $url);
return $url;
}
$url="ftp://ud03:[email protected]/ / .rar";
echo parseurl($url);
//ftp://ud03:[email protected]/%D6%D0%CE%C4/%D6%D0%CE%C4.rar
?>
JavaScriptの中のURLEncode:例えば:%E 4%B 8%AD% E 6%96%87-_.%20%E 4%B 8%AD% E 6%96%87-_.%20 encodeURIは以下の文字を符号化しません。「:」、「/」、「;」、「?」、「@」などの特殊文字例えば:http://s.jb51.net/%E4%B8%AD%E6%96%87.rarhttp%3A%2F%2Fs.jb51.net%2F%E4%B8%AD%E6%96%87.rar