PHP は Web ページの URL エンコードとデコードの問題を解決します
PHP には、次の問題を解決するための urlencode()、urldecode()、rawurlencode()、および rawurldecode() などの関数があります。 Web ページの URL エンコードとデコード。
urlencode は、Web ページ URL 内の中国語の文字のコーディング変換方法を指します。最も一般的なのは、Baidu や Google などの検索エンジンで中国語のクエリを入力する場合です。エンコードされた Web ページ URL を生成します。一般に、urlencoding には 2 つの方法があります。1 つは従来の GB2312 ベースのエンコード (Baidu、Yisou などで使用)、もう 1 つは utf-8 ベースのエンコード (Google、Yahoo などで使用) です。この記事では、エンコードとデコードの 2 つの方法をそれぞれ分析します。
中国語 -> GB2312 のエンコード -> %D6%D0%CE%C4
中国語のエンコード -> %E4%B8%AD%E6 %96%87
HTML の URL:
GB2312 としてエンコードされた HTML ファイル内:
http://www.scutephp.com/中文.rar -> ;ブラウザは自動的に http://www.scutephp.com/%D6%D0%CE%C4.rar
に変換します。 注: Firefox は、デフォルトで GB2312 Encode の中国語 URL をサポートしません。は URL を utf-8 エンコーディングで送信しますが、ftp:// プロトコルも使用できます。これは Firefox のバグとみなされます。
utf-8 としてエンコードされた HTML ファイル内:
http://www.scutephp.com/中文.rar -> ブラウザは自動的に http:// に変換します。 www.scutephp.com/%E4%B8%AD%E6%96%87.rar
コード
<p>//GB2312的Encode</p><p>echo urlencode("中文-_. ")."\n"; <br /></p><p>//%D6%D0%CE%C4-_.+</p><p>echo urldecode("%D6%D0%CE%C4-_. ")."\n"; <br /></p><p>//中文-_.<br /></p><p>echo rawurlencode("中文-_. ")."\n";</p><p> //%D6%D0%CE%C4-_.%</p><p>05echo rawurldecode("%D6%D0%CE%C4-_. ")."\n"; <br /></p><p>//中文-_.</p>
-_ を除くすべての非英数字は、パーセント記号 (%) とそれに続く 2 つの 16 進数に置き換えられます。
urlencode はスペースをプラス記号 (+) としてエンコードします
rawurlencode はスペースをプラス記号 (%20) としてエンコードします
私の最後のバージョンの txt ファイル スプリッター (オンライン) コードでは、この問題は見つかりませんでした。その結果、スペースを含むすべての URL が解析できず、ファイルのセグメンテーションが不十分になりました。ダウンロードされる。 rawurlencode() 関数を使用すると、この問題が解決されます。
1. ファイルを utf-8 ファイルとして保存し、urlencode または rawurlencode を直接使用します。
2. mb_convert_encoding 関数を使用します。
コード
<p>$url = 'http://www.phpernote.com/中文.rar';</p><p>echo urlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'))."\n";</p><p>echo rawurlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'))."\n";</p><p>//http%3A%2F%2Fwww.huikaiche.com%2F%E4%B8%AD%E6%96%87.rar</p>
応用例:
コード
<p>function parseurl($url=""){</p><p> $url = rawurlencode(mb_convert_encoding($url, 'gb2312', 'utf-8'));</p><p> $a = array("%3A", "%2F", "%40");</p><p> $b = array(":", "/", "@");</p><p> $url = str_replace($a, $b, $url);</p><p> return $url;</p><p>}</p><p>$url="ftp://yongfu:password@www.huikaiche.com/中文/中文.rar";</p><p>echo parseurl($url);</p><p>//ftp://yongfu:password@www.huikaiche.com/%D6%D0%CE%C4/%D6%D0%CE%C4.rar</p>