php5.4以降、htmlspecialcharsの出力が空になる問題
古いバージョンから php5.4 にアップグレードする場合、最も厄介な問題は htmlspecialchars ではないでしょうか。もちろん htmlentities も影響を受けますが、中国語の Web サイトでは htmlspecialchars を使用するのが一般的であり、htmlentities はほとんど使用されません。
おそらく外国人は、Web ページは一般的に utf-8 でエンコードされるべきだと考えているので、GB2312、GBK エンコードを使用する中国の Web サイトに悩まされているのかもしれません...!
特定のパフォーマンス:
$str = "9enjoy.com の PHP バージョンは 5.2.10";
echo htmlspecialchars($str);
gbk 文字セットでの出力は空です...utf-8 で、出力は正常です。
理由は 5.4.0 でのこの関数の変更です:
5.4.0 エンコーディングパラメータのデフォルト値が UTF-8 に変更されました。
元々は何ですか?
string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )
変換に使用されるエンコーディングを定義します。省略した場合、この引数のデフォルト値は、PHP 5.4.0 より前のバージョンでは ISO-8859-1 であり、PHP 5.4.0 以降では UTF-8 です。この関数を中国語で使用すると、出力は空白になります。
国内のオープンソース プログラムの多くは 5.4 ではこのような問題が発生する可能性があり、DISCUZ 担当者もユーザーに 5.4 にアップグレードしないことを推奨しています。
解決策:
1. htmlspecialchars を使用するすべてのプログラムを変更します
1.1 2 番目の $flags パラメータはデフォルトで ENT_COMPAT なので、
htmlspecialchars($str,ENT_COMPAT,'GB2312'); に変更します。 GBK パラメーターがないため、強制的に GBK を使用すると、エラーが報告されます:
警告: htmlspecialchars(): charset `gbk' not support, according to utf-8
GBK を使用するには、次のように変更します。
htmlspecialchars($str ,ENT_COMPAT,'ISO-8859-1');
1.2. 同じ手順が変更されますが、パラメータを 1 つ省略できます。
ini_set('default_charset','gbk');
を追加して、それを
htmlspecialchars($str,ENT_COMPAT,'');に変更することができます。
ドキュメントには次のように書かれています: 空の文字列はスクリプトエンコーディングからの検出を有効にします ( Zend マルチバイト)、default_charset、および現在のロケール (nl_langinfo() および setlocale() を参照) の順です。推奨されません。おそらく、空の文字列が渡された場合、default_charset のエンコーディングを使用することを意味します
1.3。 .. もともと、htmlspecialchars という単語は常に覚えるのが困難でした。
function htmlout($str) {
Return htmlspecialchars($str,ENT_COMPAT,'ISO-8859-1');
}
その後、一括置換に進みます。
2. ソースコードを直接変更して再コンパイルします。これは私が現在オンラインで取り組んでいる計画でもあります。
ext/standard/html.cを変更します
372行目について
/* デフォルトはUTF-8になりました */
if (charset_hint == NULL)
return cs_utf_8;
cs_utf_8をcs_8859_1に変更します
/* デフォルトはUTF-8になりました*/
if (charset_hint == NULL)
return cs_8859_1;
コンパイル後、元のプログラムを調整する必要はありません。
インストール方法については、http://www.9enjoy.com/linux-upgrade-php54/を参照してください。
Windowsではどうすればよいですか?これは、自分でコンパイルする方法を見つけることができますが、非常に困難です...
参考として Web サイトを提供します: http://www.phpvim.net/web/php/build-php5-4-and-xdebug- on-win32.html
彼の言葉を引用すると: コーヒーとコーラを用意してください、準備してください、何時間もかかるかもしれません...

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。
