<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>()
コンテンツを読んだ後、 mb_convert_encoding()を使用して、文字列をターゲットエンコーディングに変換できます。
<?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">"<br>"</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>);
}
?>
ここでは、 MB_CONVERT_ENCODINGの3番目のパラメーターはファイルの元のエンコードであり、最初と2番目のパラメーターはそれぞれターゲットエンコードと入力文字列です。
たとえば、出力HTMLページに正しいエンコード宣言があることを確認してください。
<meta charset=</span><span><span class="hljs-string">"UTF-8"</span></span><span>>
このようにして、ブラウザはコンテンツをエンコードするコンテンツを正しく識別し、Carled Code Displayを回避できます。
MB_DETECT_ENCODING()を使用して、エンコードを自動的に検出して、死んだエンコードの作成を避けることができます。
<?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>;
?>
純粋にHTMLタグをフィルタリングしている場合は、 sprip_tags ()と組み合わせてfgets ()を使用することを検討して、エンコーディング処理がより柔軟になります。
<?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>);
}
?>
上記の方法により、開発者はFGETSS()によって引き起こされる多言語の文字化けの問題を効果的に回避し、プログラムの多言語テキストの処理の安定性と読みやすさを確保できます。