ホームページ  >  記事  >  バックエンド開発  >  PHPの中国語文字化け問題の解決方法 URL_PHPチュートリアル

PHPの中国語文字化け問題の解決方法 URL_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:43:07991ブラウズ

Apache または Linux システムを使用している場合、中国語の URL が文字化けする問題は非常に一般的です。次のエディタでは、PHP での中国語の URL が文字化けする問題の解決策を紹介します。この方法がすべての学生に役立つことを願っています。 。

?id="中文" を使用して中国語のパラメータを渡すと文字化けが発生します。これは、php で中国語を直接 URL に送信できないためです。この問題が他の言語でも発生するかどうかはわかりません。

インターネットで言及されている header(“content-type:text/html;charset=utf-8”); のような解決策や、データベース ページなどを utf8 に設定する方法は完全に無効であり、常に渡されます。中国語が文字化けしてしまいました。

すべての 04ie.com サイトの PHP で統一された utf8 エンコーディングを使用していますが、パススルーすると常に文字化けします。その後、いくつかのブラウザをテストしたところ、360 はパススルーできることがわかりました。その後、$msg = を使用しました。 iconv ('gbk','utf-8',$_GET["msg"]); いくつかのブラウザを変換してテストした後も、ほとんどのブラウザで文字化けが表示されます。

最後にまとめると、GET[]の過去の値については、中国語をURL内で直接送信することはできず、どうしても送信する必要がある場合は、urlencode()メソッドを使用して中国語を処理します。 POST[] をどうすればいいのかわかりません。まだ実験をしていません。


urlencode():

の使用法を確認するには、PHP マニュアルにアクセスしてください。

urlencode() この関数は文字列を URL にエンコードします。たとえば、スペースはプラス記号になります。ホームページのフォームデータ送信はurlencodeでエンコードされて送信されます

なるほど、フォームから送信するときは問題ないのに、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:// プロトコルは問題ありませんでした。

UTF-8 としてエンコードされた HTML ファイル内: /中文.rar -> ブラウザは自動的に /%E4%B8%AD%E6%96%87.rar に変換します。

PHP での URL エンコード:

コードは次のとおりです

コードをコピー echo urlencode("中文-_. ")."n"; //%D6%D0%CE%C4-_.+ echo urldecode("%D6%D0%CE%C4-_. ")."n"; echo rawurlencode("中文-_. ")."n"; //%D6%D0%CE%C4-_.%20 urlencode と rawurlencode の違い: urlencode はスペースをプラス記号「+」としてエンコードし、rawurlencode はスペースをプラス記号「%20」としてエンコードします。
// GB2312 のエンコード
echo rawurldecode("%D6%D0%CE%C4-_. ")."n"; ?>




「-_.」を除くすべての非英数字は、パーセント記号「%」とそれに続く 2 つの 16 進数に置き換えられます。
UTF-8 エンコードを使用したい場合は、2 つの方法があります:


1. ファイルを UTF-8 ファイルとして保存します。urlencode または rawurlencode を直接使用します。

2. mb_convert_encoding 関数を使用します。

コードは次のとおりです

コードをコピー

$url = '/中文.rar'; echo urlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'))."n"; echo rawurlencode(mb_convert_encoding($url, 'utf-8', 'gb2312'))."n"; //http%3A%2F%2Fs.%2F%E4%B8%AD%E6%96%87.rar ?>


例:

例: %E4%B8%AD%E6%96%87-_.%20%E4%B8%AD%E6%96%87-_.%20
コードは次のとおりです コードをコピー
関数parseurl($url="")
{
$url = rawurlencode(mb_convert_encoding($url, 'gb2312', 'utf-8')); $a = 配列("%3A", "%2F", "%40"); $b = 配列(":", "/", "@"); $url = str_replace($a, $b, $url); $url を返す
}
$url="ftp://ud03:password@s./中文/中文.rar"; エコーパースURL($url); //ftp://ud03:password@s./%D6%D0%CE%C4/%D6%D0%CE%C4.rar
?>




JavaScript での URL エンコード:
encodeURI は、「:」、「/」、「;」、「?」、「@」、およびその他の特殊文字をエンコードしません。


例: /%E4%B8%AD%E6%96%87.rarhttp%3A%2F%2Fs.%2F%E4%B8%AD%E6%96%87.rar

中国語を処理する唯一の方法は、urlencode() メソッドを使用することのようです。渡す前にエンコードし、渡した後に次の 2 つの関数を使用する必要があります。 '). "、デコード: ".urldecode('中国語')."、括弧内の中国語は渡される文字です。

次のように: 配信ページは最初に 04ie.com: td.php?id=".urlencode('中国語')." によってエンコードされ、ページはデコードのために受け入れられます: urldecode(id).".

機能は後ほど付けます


コードは次のとおりです

コードをコピー

{ $msg = iconv("UTF-8","GB2312",$msg); // $msg を UTF-8 エンコードから GB2312 エンコードに変換します }
if (preg_match("/^([".chr(228)."-".chr(233)."]{1} [".chr(128)."-".chr(191)."]{ 1}[".chr(128)."-".chr(191)."]{1})+$/",$msg)) //$msg が UTF-8 エンコードの場合





http://www.bkjia.com/PHPjc/633202.htmlwww.bkjia.com

tru​​e

技術記事 Apache または Linux システムを使用している場合、中国語の URL が文字化けする問題はよくあることですが、PHP での中国語の URL が文字化けする問題の解決策をご紹介したいと思います...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。