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

我的一些脚本使用不同的编码,当我尝试将它们合并时,这是一个问题。

但是我不能改变他们使用的编码,而是我想改变脚本A的结果的编码,并在脚本B中用它作为参数。

所以:有什么简单的方法在PHP中将string从UTF-8更改为ISO-88591? 我已经看过utf_encode和_decode,但他们不做我想要的。 为什么不存在任何“utf2iso()” – 函数或类似的?

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

看看iconv()mb_convert_encoding() 。 顺便说一句:为什么不要utf8_encode()utf8_decode()为你工作?

utf8_decode – 将使用UTF-8编码的ISO-8859-1字符的string转换为单字节ISO-8859-1

utf8_encode – 将ISO-8859-1string编码为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。

首先,不要使用不同的编码。 它导致了一个混乱,而UTF-8绝对是你应该到处使用的。

机会是你的input不是ISO-8859-1,而是别的东西(ISO-8859-15,Windows-1252)。 要从这些转换,请使用iconv或mb_convert_encoding

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

在头部设置meta标签

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

使用链接http://www.i18nqa.com/debug/utf8-debug.html来replace你想要的符号字符。;

然后用str_replace就好

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

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

你需要使用iconv包,特别是iconv函数。

我使用这个function:

 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

我用了:

 function utf8_to_html ($data) { return preg_replace( array ( '/ä/', '/ö/', '/ü/', '/é/', '/à/', '/è/' ), array ( '&auml;', '&ouml;', '&uuml;', '&eacute;', '&agrave;', '&egrave;' ), $data ); } 

在我的情况下,名称中包含这些字符的file upload后,他们甚至没有与Filezilla可见! 在Cpanel文件pipe理器中,他们显示与? (在黑色背景下)。 这个组合使得它在浏览器上正确显示(HTML文件是西方编码的):

 $dspFileName = utf8_decode(htmlspecialchars(iconv(mb_internal_encoding(), 'utf-8', basename($thisFile['path']))) ); 

使用起来好多了

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

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

使用html_entity_decode()htmlentities()

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

htmlentities()将input格式化为UTF8html_entity_decode()格式化为ISO-8859-1格式。

 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'); } }