Current Location: Home> Latest Articles> How to Avoid Multilingual Garbled Text Issues Caused by fgetss? Practical Solutions

How to Avoid Multilingual Garbled Text Issues Caused by fgetss? Practical Solutions

gitbox 2025-08-27
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// This part is unrelated to the article content and can be used for general configuration or comments</span></span><span>
</span><span><span class="hljs-comment">// For example: defining constants, loading configuration files, etc.</span></span><span>
</span><span><span class="hljs-title function_ invoke__">define</span></span><span>(</span><span><span class="hljs-string">&#039;APP_NAME&#039;</span></span><span>, </span><span><span class="hljs-string">&#039;Multilingual Processing Tool&#039;</span></span><span>);
</span><span><span class="hljs-meta">?></span></span><span>
<p><hr></p>
<p><h1>How to Avoid Multilingual Garbled Text Issues Caused by fgetss? Practical Solutions</h1></p>
<p><p>In PHP, <code></span>fgetss<span>()

2. Specify the Correct Encoding in PHP

After reading the content, you can use mb_convert_encoding() to convert the string into the target 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">&#039;multilang.txt&#039;</span></span><span>, </span><span><span class="hljs-string">&#039;r&#039;</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">// Assume the file encoding is GBK and convert it to 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">&#039;UTF-8&#039;</span></span><span>, </span><span><span class="hljs-string">&#039;GBK&#039;</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;

Here, the third parameter of mb_convert_encoding is the original encoding of the file, while the first and second parameters are the target encoding and the input string, respectively.

3. Set the Page Encoding

Make sure the output HTML page contains the correct charset declaration, for example:

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

This ensures the browser can correctly interpret the encoding and avoid garbled text.

4. Use PHP Built-in Functions to Detect Encoding

You can use mb_detect_encoding() to automatically detect encoding and avoid hardcoding it:

&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">&#039;UTF-8&#039;</span></span><span>, </span><span><span class="hljs-string">&#039;GBK&#039;</span></span><span>, </span><span><span class="hljs-string">&#039;BIG5&#039;</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">&#039;UTF-8&#039;</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">&#039;UTF-8&#039;</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. Avoid Using fgetss() When Possible

If you only need to filter HTML tags, consider using fgets() combined with strip_tags(). This approach offers more flexibility for encoding handling:

&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">&#039;multilang.txt&#039;</span></span><span>, </span><span><span class="hljs-string">&#039;r&#039;</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">// Encoding conversion as described above</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. Conclusion

  • Ensure file encoding and page encoding are consistent, with UTF-8 recommended as the standard.
  • Use mb_convert_encoding() after reading to convert the encoding and ensure characters display correctly.
  • Avoid relying directly on fgetss()’s encoding assumptions. Combine fgets() with strip_tags() for better compatibility.
  • Always declare the correct encoding in the page so that browsers can parse content properly.

By following these methods, developers can effectively prevent multilingual garbled text issues caused by fgetss(), ensuring stable and readable handling of multilingual text in applications.