現在の位置: ホーム> 最新記事一覧> fgetssによって引き起こされる多言語の文字化けの問題を避ける方法は?実用的なソリューション

fgetssによって引き起こされる多言語の文字化けの問題を避ける方法は?実用的なソリューション

gitbox 2025-08-27
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// この部分は、記事の内容とは何の関係もありません,一般的な構成またはコメントを配置するために使用できます</span></span><span>
</span><span><span class="hljs-comment">// 例えば:定数を定義します、構成ファイルなどを読み込みます。</span></span><span>
</span><span><span class="hljs-title function_ invoke__">define</span></span><span>(</span><span><span class="hljs-string">'APP_NAME'</span></span><span>, </span><span><span class="hljs-string">'多言語処理ツール'</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>

<hr>

<h1>避ける方法 fgetss 多言語の文字化けの問題が発生しました?実用的なソリューション</h1>

<p>存在する PHP 真ん中,<code></span><span><span class="hljs-title function_ invoke__">fgetss</span></span><span>()

2. PHPで正しいエンコーディングを指定します

コンテンツを読んだ後、 mb_convert_encoding()を使用して、文字列をターゲットエンコーディングに変換できます。

 &lt;?php
</span><span><span class="hljs-variable">$handle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'multilang.txt'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$handle</span></span><span>) {
    </span><span><span class="hljs-keyword">while</span></span><span> ((</span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgetss</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>, </span><span><span class="hljs-number">4096</span></span><span>)) !== </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-comment">// ファイルエンコーディングがあると仮定します GBK,に頼ります UTF-8</span></span><span>
        </span><span><span class="hljs-variable">$utf8Line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-variable">$line</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'GBK'</span></span><span>);
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$utf8Line</span></span><span> . </span><span><span class="hljs-string">"&lt;br&gt;"</span></span><span>;
    }
    </span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>);
}
?&gt;

ここでは、 MB_CONVERT_ENCODINGの3番目のパラメーターはファイルの元のエンコードであり、最初と2番目のパラメーターはそれぞれターゲットエンコードと入力文字列です。

3.ページエンコーディングを設定します

たとえば、出力HTMLページに正しいエンコード宣言があることを確認してください。

 &lt;meta charset=</span><span><span class="hljs-string">"UTF-8"</span></span><span>&gt;

このようにして、ブラウザはコンテンツをエンコードするコンテンツを正しく識別し、Carled Code Displayを回避できます。

4. PHPビルトイン関数を使用して、エンコードを検出します

MB_DETECT_ENCODING()を使用して、エンコードを自動的に検出して、死んだエンコードの作成を避けることができます。

 &lt;?php
</span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgetss</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>, </span><span><span class="hljs-number">4096</span></span><span>);
</span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_detect_encoding</span></span><span>(</span><span><span class="hljs-variable">$line</span></span><span>, [</span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'GBK'</span></span><span>, </span><span><span class="hljs-string">'BIG5'</span></span><span>], </span><span><span class="hljs-literal">true</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$encoding</span></span><span> !== </span><span><span class="hljs-string">'UTF-8'</span></span><span>) {
    </span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_convert_encoding</span></span><span>(</span><span><span class="hljs-variable">$line</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$line</span></span><span>;
?&gt;

5。fgetss ()の使用を避けます

純粋にHTMLタグをフィルタリングしている場合は、 sprip_tags ()と組み合わせてfgets ()を使用することを検討して、エンコーディング処理がより柔軟になります。

 &lt;?php
</span><span><span class="hljs-variable">$handle</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fopen</span></span><span>(</span><span><span class="hljs-string">'multilang.txt'</span></span><span>, </span><span><span class="hljs-string">'r'</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$handle</span></span><span>) {
    </span><span><span class="hljs-keyword">while</span></span><span> ((</span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fgets</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>)) !== </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-variable">$line</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strip_tags</span></span><span>(</span><span><span class="hljs-variable">$line</span></span><span>);
        </span><span><span class="hljs-comment">// エンコード変換プロセスは上記と同じです</span></span><span>
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$line</span></span><span>;
    }
    </span><span><span class="hljs-title function_ invoke__">fclose</span></span><span>(</span><span><span class="hljs-variable">$handle</span></span><span>);
}
?&gt;

3。概要

  • ファイルとページのエンコードは一貫している必要があり、UTF- 8を統一された方法で使用することをお勧めします
  • 読んだ後、 mb_convert_encoding()を使用してエンコードを変換して、文字が正常に表示されるようにします。
  • fgetss()のエンコード仮定に直接依存し、 fgets()sprip_tags()を組み合わせて互換性を向上させないでください。
  • ブラウザが正常に解析する前に、ページは正しいエンコードを宣言する必要があります。

上記の方法により、開発者はFGETSS()によって引き起こされる多言語の文字化けの問題を効果的に回避し、プログラムの多言語テキストの処理の安定性と読みやすさを確保できます。