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

将utf8字符转换为iso-88591并返回PHP,php,encoding,utf-8,iso-8859-1,Php,Encoding,Utf 8,Iso 8859 1,我的一些脚本使用不同的编码,当我尝试组合它们时,这就成了一个问题 但是我不能更改它们使用的编码,而是要更改脚本A中结果的编码,并将其用作脚本B中的参数 那么:在PHP中有没有简单的方法将字符串从UTF-8更改为ISO-88591?我已经看过utf_编码和解码,但它们并不是我想要的。为什么不存在任何“utf2iso()”-函数或类似的函数 我认为我没有不能以ISO格式书写的字符,因此这不应该是一个大问题。您需要使用该软件包,特别是其iconv功能。请查看或。 顺便问一下:你为什么不为你工作呢 ut

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

但是我不能更改它们使用的编码,而是要更改脚本A中结果的编码,并将其用作脚本B中的参数

那么:在PHP中有没有简单的方法将字符串从UTF-8更改为ISO-88591?我已经看过utf_编码和解码,但它们并不是我想要的。为什么不存在任何“utf2iso()”-函数或类似的函数

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

您需要使用该软件包,特别是其iconv功能。

请查看或。 顺便问一下:你为什么不为你工作呢

utf8\u解码-使用 ISO-8859-1字符编码为 UTF-8至单字节ISO-8859-1

utf8_编码-编码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\u en/decode()
mb\u convert\u encoding()
需要ext/mbstring和
iconv()
需要ext/iconv。首先,不要使用不同的编码。这会导致混乱,UTF-8绝对是你应该在任何地方使用的

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

然而,
utf8\u编码
utf8\u解码
应适用于ISO-8859-1。如果您可以发布一个指向文件或示例字符串的链接,如果转换失败或产生意外结果,那就太好了。

我使用了:

function utf8_to_html ($data) {
    return preg_replace(
        array (
            '/ä/',
            '/ö/',
            '/ü/',
            '/é/',
            '/à/',
            '/è/'
        ),
        array (
            'ä',
            'ö',
            'ü',
            'é',
            'à',
            'è'
        ),
        $data 
    );
}
我使用此功能:

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
函数formatcell($data,$num,$fill=”“){
$data=修剪($data);
$data=str_替换(chr(13),''$data);
$data=str_替换(chr(10),''$data);
//将UTF8翻译成英文字符
$data=iconv('UTF-8','ASCII//TRANSLIT',$data);
$data=preg\u replace(“/[\'”\^\~\`]/i“,”$data);
//用空格填满它
对于($i=strlen($data);$i<$num;$i++){
$data.=$fill;
}
//将字符串限制为num个字符
$data=substr($data,0,$num);
返回$data;
}
echo formatcell(“YES UTF8 String Zürich”,25,'x');//YES UTF8 String Züricxxx
echo formatcell(“非UTF8字符串苏黎世”,25,'x');//非UTF8字符串苏黎世XXX
在我的博客中查看我的功能

将头部的元标记设置为

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

这是我经常使用和帮助的方法。谢谢!

在我的例子中,在上载了名为包含这些字符的文件后,它们甚至无法通过Filezilla!在Cpanel filemanager中显示(在黑色背景下)。 这种组合使其在浏览器上正确显示(HTML文档采用西方编码):


使用它要好得多

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


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

使用
html\u entity\u decode()
htmlentities()


htmlentities()
将您的输入格式化为
UTF8
html\u entity\u decode()
将其重新格式化为
ISO-8859-1

utf8\u解码应该是您的utf2iso?!?值得注意的是,PHP在内部继续移动到utf-8,因此您可能拥有的任何字符串都来自外部。将cURL、文件访问函数、流、PDO/MySQL或任何其他用于访问外部数据的API设置为使用utf-8,以便当PHP得到它时,它已经是正确的。谢谢你的回答,你和这里的其他人都是对的:utf8_decode()似乎完成了工作。文件或我的浏览器一定有一些问题。至少我不再能够重现错误…(可能我的浏览器字符集设置有问题?)记录在案:我曾经遇到过这样的情况,但我注意到iconv已经被调用两次(嵌套)到同一个str变量。在我删除第一次调用后,它的工作非常有魅力。(utf8_decode和mb_convert_encoding没有被使用)这个建议帮助我解决了一个特殊的问题,其中UTF-8字符串(“Atlántico”)首先按字面意思编码为ISO-8859-1(看起来像“AtlÃntico”),然后这些单字节字符被重新编码回UTF-8(看起来完全相同的“AtlÃntico”,但这次每个字符都是UTF-8编码的)这很有帮助,因为它将UTF-8字符解码为其字面ANSI替代字符,然后以某种神秘的方式正确读取并显示为UTF-8字符。这有意义吗?嗯……请尝试对代码添加一些解释,以增强post.iconv或mb_convert_编码的教育价值。iconv需要了解输入编码,可能不是这样。@Benubird如果你猜测编码,你可能会遇到更糟糕的问题(现在它不容易复制,因为它可能取决于字符的频率)。但是你是对的,
mb\u convert\u编码
肯定属于这个答案。添加了。“避免UTF8以外的任何编码。”“总的来说,这是一个很好的建议,但有时是不可能的。例如,我们试图让第三方集成在该方需要拉丁1格式的XML的情况下工作。对于使用此解决方案的任何其他人,请注意该函数实际上是mb_convert_编码
 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 
    $find = array('“', '’', '…', '—', '–', '‘', 'é', 'Â', '•', 'Ëœ', 'â€'); // en dash
                        $replace = array('“', '’', '…', '—', '–', '‘', 'é', '', '•', '˜', '”');
$content = str_replace($find, $replace, $content);
$dspFileName = utf8_decode(htmlspecialchars(iconv(mb_internal_encoding(), 'utf-8', basename($thisFile['path']))) );
$html = html_entity_decode(htmlentities($html, ENT_QUOTES, 'UTF-8'), ENT_QUOTES , 'ISO-8859-1');