将 utf8 字符转换为 iso-88591,然后在 PHP 中转换回

2022-08-30 10:26:41

我的一些脚本使用不同的编码,当我尝试将它们组合在一起时,这就产生了问题。

但是我无法更改他们使用的编码,而是要更改脚本A中结果的encodig,并将其用作脚本B中的参数。

那么:有没有简单的方法可以在PHP中将字符串从UTF-8更改为ISO-88591?我看过utf_encode和_decode,但他们没有做我想做的事。为什么没有任何“utf2iso()”函数或类似功能?

我不认为我有不能用ISO格式书写的字符,所以这应该不是一个大问题。


答案 1

看看 iconv() 或 mb_convert_encoding()。。顺便说一句:为什么utf8_encode()utf8_decode()不适合您?

utf8_decode — 将包含使用 UTF-8 编码的 ISO-8859-1 字符的字符串转换为单字节 ISO-8859-1

utf8_encode — 将 ISO-8859-1 字符串编码为 UTF-8

所以基本上

$utf8 = 'ÄÖÜ'; // file must be UTF-8 encoded
$iso88591_1 = utf8_decode($utf8);
$iso88591_2 = iconv('UTF-8', 'ISO-8859-1', $utf8);
$iso88591_2 = mb_convert_encoding($utf8, 'ISO-8859-1', 'UTF-8');

$iso88591 = 'ÄÖÜ'; // file must be ISO-8859-1 encoded
$utf8_1 = utf8_encode($iso88591);
$utf8_2 = iconv('ISO-8859-1', 'UTF-8', $iso88591);
$utf8_2 = mb_convert_encoding($iso88591, 'UTF-8', 'ISO-8859-1');

所有人都应该做同样的事情 - 不需要特殊的扩展名,需要ext / mbstring并且需要ext / iconv。utf8_en/decode()mb_convert_encoding()iconv()


答案 2

首先,不要使用不同的编码。它会导致一团糟,UTF-8绝对是你应该在任何地方使用的那个。

您的输入可能不是ISO-8859-1,而是其他东西(ISO-8859-15,Windows-1252)。要从这些转换,请使用 iconvmb_convert_encoding

尽管如此,并且应该适用于ISO-8859-1。如果您可以发布指向文件或uuencodedbase64示例字符串的链接,如果转换失败或产生意外结果,那就太好了。utf8_encodeutf8_decode


推荐