编码-将utf8字符转换为iso-88591并返回到PHP

我的某些脚本使用了不同的编码,当我尝试将它们组合时,这已成为一个问题。

但是我无法更改它们使用的编码,相反,我想更改脚本A中结果的编码,并将其用作脚本B中的参数。

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

我认为我的字符不能以ISO格式编写,因此这不是一个大问题。

qualbeen asked 2020-07-31T02:42:15Z
10个解决方案
120 votes

看看utf8_en/decode()utf8_en/decode()。顺便说一句:utf8_en/decode()utf8_en/decode()为什么不为您服务?

utf8_decode —使用以下命令转换字符串 ISO-8859-1字符编码为 UTF-8到单字节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');

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

Stefan Gehrig answered 2020-07-31T02:42:43Z
6 votes

首先,不要使用不同的编码。 这会导致混乱,而UTF-8绝对是您在任何地方都应该使用的那种。

您输入的内容可能不是ISO-8859-1,而是其他值(ISO-8859-15,Windows-1252)。 要从中转换,请使用iconv或utf8_encode

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

phihag answered 2020-07-31T02:43:12Z
1 votes

将head中的meta标签设置为

 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

使用链接[http://www.i18nqa.com/debug/utf8-debug.html]替换所需的符号字符。

然后像这样使用str_replace

    $find = array('“', '’', '…', '—', '–', '‘', 'é', 'Â', '•', 'Ëœ', 'â€'); // en dash
                        $replace = array('“', '’', '…', '—', '–', '‘', 'é', '', '•', '˜', '”');
$content = str_replace($find, $replace, $content);

它是我使用和帮助的方法很多。 谢谢!

user2842936 answered 2020-07-31T02:43:45Z
1 votes

更好用

$ value = mb_convert_encode($ value,'HTML-ENTITIES','UTF-8');

特别是在使用AJAX调用提交“ ISO-8859-1”字符时。 它适用于中文,日语,捷克语,德语和更多其他语言。

VINAY KANT answered 2020-07-31T02:44:14Z
0 votes

您需要使用iconv软件包,尤其是其iconv函数。

Martin v. Löwis answered 2020-07-31T02:44:34Z
0 votes

我使用此功能:

function formatcell($data, $num, $fill=" ") {
    $data = trim($data);
    $data=str_replace(chr(13),' ',$data);
    $data=str_replace(chr(10),' ',$data);
    // translate UTF8 to English characters
    $data = iconv('UTF-8', 'ASCII//TRANSLIT', $data);
    $data = preg_replace("/[\'\"\^\~\`]/i", '', $data);


    // fill it up with spaces
    for ($i = strlen($data); $i < $num; $i++) {
        $data .= $fill;
    }
    // limit string to num characters
   $data = substr($data, 0, $num);

    return $data;
}


echo formatcell("YES UTF8 String Zürich", 25, 'x'); //YES UTF8 String Zürichxxx
echo formatcell("NON UTF8 String Zurich", 25, 'x'); //NON UTF8 String Zurichxxx

在我的博客中查看我的功能[http://www.unexpectedit.com/php/php-handling-non-english-characters-utf8]

Ignacio Pascual answered 2020-07-31T02:44:59Z
0 votes

我用了:

function utf8_to_html ($data) {
    return preg_replace(
        array (
            '/ä/',
            '/ö/',
            '/ü/',
            '/é/',
            '/à/',
            '/è/'
        ),
        array (
            '&auml;',
            '&ouml;',
            '&uuml;',
            '&eacute;',
            '&agrave;',
            '&egrave;'
        ),
        $data 
    );
}
Luís Cruz answered 2020-07-31T02:45:20Z
0 votes

以我为例,在上传包含这些字符名称的文件后,在Filezilla中甚至看不到它们! 在Cpanel filemanager中,它们显示为? (在黑色背景下)。而且这种组合使它可以在浏览器上正确显示(HTML文档是西方编码的):

$dspFileName = utf8_decode(htmlspecialchars(iconv(mb_internal_encoding(), 'utf-8', basename($thisFile['path']))) );
user109764 answered 2020-07-31T02:45:40Z
0 votes

使用htmlentities()htmlentities()

$html = html_entity_decode(htmlentities($html, ENT_QUOTES, 'UTF-8'), ENT_QUOTES , 'ISO-8859-1');

htmlentities()将输入格式化为UTF8,并将html_entity_decode()格式化为ISO-8859-1

Fernando CR answered 2020-07-31T02:46:04Z
-1 votes
function parseUtf8ToIso88591(&$string){
     if(!is_null($string)){
            $iso88591_1 = utf8_decode($string);
            $iso88591_2 = iconv('UTF-8', 'ISO-8859-1', $string);
            $string = mb_convert_encoding($string, 'ISO-8859-1', 'UTF-8');       
     }
}
user1786647 answered 2020-07-31T02:46:20Z
translate from https://stackoverflow.com:/questions/374425/convert-utf8-characters-to-iso-88591-and-back-in-php