検索
ホームページバックエンド開発PHPチュートリアルマスターの皆さん、来てください。マスターがまったく理解できないエンコードの問題が無数にあります。魔法の文字化けコード。

それがこの投稿です。 http://bbs.csdn.net/topics/390807783?page=1#post-397542169

この投稿には詳細な説明があります。この問題を解いた人は240点を獲得できます。このような小さな問題が 2 ~ 3 日間私を悩ませています。http の下部からデータ パケットを調べましたが、まだ解決できません。
----------------------------------------------- - ----------------------------------------
数え切れないほどの専門家が理解できないit out (garbled code) ) エンコードの問題: Linux 上の Chrome でアクセスした場合にのみコードが文字化けします。それ以外はすべて正常です。
Windows 上のどのブラウザでも問題ありません。
Linux 環境下。クロムアクセスのみ文字化けして表示されます。 (もちろん、Chromeのコードを手動で修正すれば正常に表示できます。)
----------------------------------
http://parttime.wengege.com/h/login.html

応答エンコーディングは実際には: gbk,utf-8 です

HTTP/1.1 200 OK
サーバー: nginx/1.4.1
日付: 月09 Jun 2014 15:28:28 GMT
Content-Type: text/html; charset=gbk,utf-8
Content-Length: 1843
Last-Modified: Mon, 09 Jun 2014 15:28:16 GMT
接続: keep-alive
ETag: "5395d290-733"
Accept-Ranges: bytes

/login.html のコンテンツは editplus で開かれ、utf-8 として表示され、何度か utf-8 として保存されています。

ブラウザはどこでそれが gbk であると判断しますか?それでコードが文字化けしているのでしょうか?

-----------------------
2 階の changjay からの返信を引用:
メモ帳や emeditor などの別のエディタを試してください
変更しました。いくつかのエディタを作成して保存しました。 w3c は、GBK 文字が含まれているかどうかをチェックします。つまり、utf-8 は gbk として認識されます。おかしいですね。何度も変換して保存しました。

http://parttime.wengege.com/h/test.html
上記の接続は、Chrome でも文字化けします (JS を導入すると文字化け、不思議なことに他の部分も文字化けします)。 IE ではまったく正常です。
----------------------------------------------- - ---
ここで問題は、すべてのファイル (css、php、js) がチェックされ、utf-8 でエンコードされていると判断されたことです。
解決できない問題がいくつかあります:
1. 通常の HTML は utf-8 でエンコードされます。 httpレスポンスは実際にはgbk、utf-8なので文字化けしてしまいます。問題は、gbk がどこから来たのかということです。これら 3 つの文字はどこから来たのでしょうか?
3 つの文字 GBK をサイト全体で検索しました。何もない! ! !
2. HTML は時々成功しても、JS は依然として文字化けします。インポートされたエンコーディングを utf-8 として指定します。

3. w3c の不正な Web サイトのチェックを通じて、「成功した識別」コードは依然として「gbk」のままです。その後、w3c の Web サイトは何度もクラッシュしました。

すごいですね、チェックの結果、ある回線に問題があることが分かりました。すべての文字を再入力しましたが、同じままです。ファイルのディレクトリを変更した後でも、thinkphp3.1 のログインは正常に行われます。ただし、この HTML を thinkphp3.2 で実行すると異常です。重要なのは、HTML と thinkphp は互いに何の関係もないということです。


ディスカッションに返信(解決策)

おそらく、Apache の設定に問題があります。Apache の設定に文字セット設定があることを思い出してください

またまたですか?
Windows 上のどのブラウザでも問題ありません。 これは恣意的すぎます!
これは XP 360 速度ブラウザのスクリーンショットです


IE に問題がないことは否定しません
これは、IE には強力な文字セット認識機能があり、Content-Type: text の影響を完全に無視できるためです/html; charset
これが Netscape が崩壊した理由の 1 つでした。
そして、Netscape 崩壊時にリリースされたブラウザ コード (10 MB 以上の C プログラム) に基づいて構築されたさまざまなブラウザは、Microsoft の特許のため、この問題を解決できません
もちろん、これは議論の順序からの余談です

charset=gbk がある場所を見つける必要があります
ツール ソフトウェアをあまり信頼しないでください。手動で 1 行ずつ検索するのが最善です。結局のところ、構成ファイルはほんのわずかしかありません

しかし、この状況を引き起こしたいくつかのプラグインをインストールした可能性は排除されません

この問題は私のローカルマシンでも完全に再現されます
login.html が保存されている限りas utf-8 エンコーディングに BOM がない場合、文字化けするはずです。保存時に BOM は保持され、側面のコード化けはありません。 UltraEdit で何度もテストを繰り返しましたが、結果は同じです。

重要なのは、これまでのプロジェクトでこのようなことが起こったかどうかです。そうでない場合は、コードに問題があります。ある場合は、サーバーの問題、オペレーティング システムの問題、または単にコード入力のエラーである可能性があります (元の SQL ステートメントに間違った文字があり、私はそれを見つけるのに苦労しました)。小さな間違いを犯すことはできないと感じたので、実際にはまだコミットしています。

私の提案は、主にコードか動作環境かを確認することです。

この問題は私のマシンで完全に再現されます
login.html が BOM なしの utf-8 エンコーディングとして保存されている限り、文字化けします。保存時に BOM は保持され、側面のコード化けはありません。 UltraEdit で何度もテストを繰り返しましたが、結果は同じです。



BOM を保持する方法 ありがとうございます

nginx.conf 設定ファイルを確認してください? GBKってあるの?

またここですか?
Windows 上のどのブラウザでも問題ありません。 これは恣意的すぎます!
これはXP 360スピードブラウザのスクリーンショットです



xuが大きいので、投稿者はWindows上のサーバーを参照していると思います サーバーを変更しても大丈夫なので、おそらくnginxの構成またはモジュールが原因です。邪魔ですよね?


この問題は私のローカルマシンでも完全に再現されます
login.html が BOM なしの utf-8 エンコードで保存されている限り、文字化けします。保存時に BOM は保持され、側面のコード化けはありません。 UltraEdit で何度もテストを繰り返しましたが、結果は同じです。



BOM を保持する方法 ありがとうございます


UltraEdit を使用して名前を付けて保存し、保持する形式として「UTF-8」を選択し、保持しない場合は「UTF-8 - No BOM」を選択します。

他の人の判断を妨げないでください
うわー
明らかに
3c21444f435459504520 には BOM ヘッダーがありません
efbbbf3c21444f435459 には BOM ヘッダーがあります

ブラウザの場合、BOM ヘッダーはせいぜい表示に影響しますstyle 、文字化けを起こさない

$url = 'http://parttime.wengege.com/Public/js/search.js';
$s = file_get_contents($url, false, null, 0, 10);
echo bin2hex($s); ); / /2f2fe6a0b9e68daee7b1

/Public/js/search.js には BOM ヘッダーがありません

ブラウザの場合、BOM ヘッダーは文字化けを引き起こすことなく表示スタイルに影響します

言うまでもなく、サーバーは gbk を返します。 utf8 などのエンコード用の BOM ヘッダーがない場合、gbk または utf8 として表示する必要がありますか?明らかにgbkに従って表示されます。

またここですか?
Windows 上のどのブラウザでも問題ありません。 これは恣意的すぎます!
これは XP 360 速度ブラウザのスクリーンショットです


IE に問題がないことは否定しません
これは、IE には強力な文字セット認識機能があり、Content-Type: text の影響を完全に無視できるためです/html; charset
これが Netscape が崩壊した理由の 1 つでした。
そして、Netscape 崩壊時にリリースされたブラウザ コード (10 MB 以上の C プログラム) に基づいて構築されたさまざまなブラウザは、Microsoft の特許のため、この問題を解決できません
もちろん、これは議論の順序からの余談です

charset=gbk がある場所を見つける必要があります
ツール ソフトウェアをあまり信頼しないでください。手動で 1 行ずつ検索するのが最善です。結局のところ、設定ファイルはほんのわずかしかありません

しかし、インストールしたプラグインがこの状況を引き起こしたという可能性は排除されません



モデレーターありがとうございます。
つまり、Windows でコードを実行しても問題は発生しないということです。
表示されているものは Linux で実行されているため、何か問題があります。 ob_start();
header("Content-Type: text/html; charset=gbk,utf8");
ob_flush();
名前を付けて保存BOMなしとBOMありでは文字化けして正常になります


nginx.conf設定ファイルを確認してください? GBKってあるの?


またここですか?

Windows 上のどのブラウザでも問題ありません。
これは恣意的すぎます!
これはXP 360スピードブラウザのスクリーンショットです
xuが大きいので、投稿者はWindows上のサーバーを参照していると思います サーバーを変更しても大丈夫なので、おそらくnginxの構成またはモジュールが原因です。邪魔ですよね?


はい、この兄弟は正解です、司会者、彼は夜更かししすぎました、彼のレベルは非常に高いですが、彼は最近私の質問に答えたとき、彼は私の言ったこととまったく逆のことを理解していました。 。
私は何度も応答だと言いましたが、徐さんはそれは要求だと言い、たくさんの例を示してくれました。 .... Windows サーバーのことを指します。窓の下からアクセスされていたとのこと。 gbkは自動生成されると言いました。彼は、gbkを手動で設定したと言いました。 ……私とは正反対ですね。



おそらく、Apache の設定に問題があることを思い出してください

同じ ngnix 設定では、他のプロジェクトは問題なく、コードはほぼ同じです。


テスト後、utf-8 + bom として保存すると、この問題を解決できます。しかし、なぜ?誰か説明してもらえますか?

header("Content-Type: text/html; charset=gbk,utf8");
はレスポンスのヘッダーです

get_headers(url)
取得した Content-Type: text/html;はサーバー応答です

いつリクエストを言いましたか?
対応するヘッダーを設定していませんか?それを設定ファイルに入れて自動的に送信します

私はまったく混乱していませんが、あなたは忙しすぎます。
サーバーを変更しても正常になります。これは、問題のサーバーの構成に問題があることを意味します。


前と同じコード、および他の HTML コードには、BOM ヘッダーや文字化けはありません。

重要なのは、これまでのプロジェクトでこのようなことが起こったかどうかです。そうでない場合は、コードに問題があります。ある場合は、サーバーの問題、オペレーティング システムの問題、または単にコード入力のエラーである可能性があります (元の SQL ステートメントに間違った文字があり、私はそれを見つけるのに苦労しました)。実際、私はまだそれを犯していました。


私の提案は、主にコードか動作環境かを確認することです。

このようなことはこれまで一度も発生したことがありません

この問題は私のマシンで完全に再現されます

login.html が BOM なしの utf-8 エンコードで保存されている限り、文字化けします。保存時に BOM は保持され、側面のコード化けはありません。 UltraEdit で何度もテストを繰り返しましたが、結果は同じです。


はい、お兄さん、結果が分かりました。しかし、なぜ?これも知りたい質問です。
実際、誰もその理由を見つけておらず、いくつかの現象が観察されただけです

Content-Type: text/html; charset= gbk,utf8
この gbk が本当の理由ですが、そのソースを見つけたくありません

gbk が発行されたのにサーバー上に表示されなかった具体的な理由は誰にも分かりません。

xuzuning モデレーターの正解!

問題の原因は、この Web サイトを構成するときに nginx が文字セット gbk,utf-8 を使用したことが判明しました。 gbkを削除すれば大丈夫です。これでコード化けは解消されました。
thinkphp Web サイトのネチズンが私と同じ問題に遭遇しました。問題を解決するには、サーバー上の構成ファイルを確認するよう通知します。

header("Content-Type: text/html; charset=gbk,utf8");

はレスポンスのヘッダーです

get_headers(url)
取得した Content-Type: text/html; utf8
サーバーの応答です

いつリクエストを言いましたか?
対応するヘッダーを設定していませんか?それを設定ファイルに入れて自動的に送信します

私はまったく混乱していませんが、あなたは忙しすぎます。
サーバーを変更しても正常になります。これは、問題のサーバーの構成に問題があることを意味します。


ありがとうございます! ! !
もちろん、モデレータは私にサーバー上の設定ファイルを見るように注意しました。徐達、もっと早く思い出させてくれればよかったのに。

ngix charset が設定されている場合、またはフォルダーに配置されている場合はどうなりますか? ??folder?? も同じ ?charset を使用します。そのため、以前はフロントフォルダーに .htaccess ファイルがあると思っていました。このため、デフォルトの文字セット設定が見つかりませんでした。

ファイルは確かに UTF8 で保存されているとのことですが、各ページの mate タグでブラウジングエンコーディングを設定できるようです

それとも背景コード GBK によって文字が出力されているのでしょうか?

cmsを使用していますか? gbkからutf8に変換されているのでしょうか

実はphpに詳しくないので推測ですが

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHP:多くのウェブサイトの基礎PHP:多くのウェブサイトの基礎Apr 13, 2025 am 12:07 AM

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

誇大広告を超えて:今日のPHPの役割の評価誇大広告を超えて:今日のPHPの役割の評価Apr 12, 2025 am 12:17 AM

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPの弱い参照は何ですか、そしていつ有用ですか?PHPの弱い参照は何ですか、そしていつ有用ですか?Apr 12, 2025 am 12:13 AM

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

PHPで__invoke Magicメソッドを説明してください。PHPで__invoke Magicメソッドを説明してください。Apr 12, 2025 am 12:07 AM

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

同時性については、PHP 8.1の繊維を説明します。同時性については、PHP 8.1の繊維を説明します。Apr 12, 2025 am 12:05 AM

繊維はPhp8.1で導入され、同時処理機能が改善されました。 1)繊維は、コルーチンと同様の軽量の並行性モデルです。 2)開発者がタスクの実行フローを手動で制御できるようにし、I/O集約型タスクの処理に適しています。 3)繊維を使用すると、より効率的で応答性の高いコードを書き込むことができます。

PHPコミュニティ:リソース、サポート、開発PHPコミュニティ:リソース、サポート、開発Apr 12, 2025 am 12:04 AM

PHPコミュニティは、開発者の成長を支援するための豊富なリソースとサポートを提供します。 1)リソースには、公式のドキュメント、チュートリアル、ブログ、LaravelやSymfonyなどのオープンソースプロジェクトが含まれます。 2)StackOverFlow、Reddit、およびSlackチャネルを通じてサポートを取得できます。 3)開発動向は、RFCに従うことで学ぶことができます。 4)コミュニティへの統合は、積極的な参加、コード共有への貢献、および学習共有への貢献を通じて達成できます。

PHP対Python:違いを理解しますPHP対Python:違いを理解しますApr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP:それは死にかけていますか、それとも単に適応していますか?PHP:それは死にかけていますか、それとも単に適応していますか?Apr 11, 2025 am 12:13 AM

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター