我的一些脚本使用不同的编码,当我尝试组合它们时,这已经成为一个问题。
但是我无法更改他们使用的编码,而是想更改脚本 A 的结果的编码,并将其用作脚本 B 中的参数。
那么:有什么简单的方法可以在 PHP 中将字符串从 UTF-8 更改为 ISO-88591?我看过 utf_encode 和 _decode,但它们并没有做我想要的。为什么不存在任何“utf2iso()”函数或类似函数?
我不认为我有不能用 ISO 格式编写的字符,所以这不应该是一个大问题。
我的一些脚本使用不同的编码,当我尝试组合它们时,这已经成为一个问题。
但是我无法更改他们使用的编码,而是想更改脚本 A 的结果的编码,并将其用作脚本 B 中的参数。
那么:有什么简单的方法可以在 PHP 中将字符串从 UTF-8 更改为 ISO-88591?我看过 utf_encode 和 _decode,但它们并没有做我想要的。为什么不存在任何“utf2iso()”函数或类似函数?
我不认为我有不能用 ISO 格式编写的字符,所以这不应该是一个大问题。
看看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');
所有人都应该这样做——utf8_en/decode()
不需要特殊扩展,mb_convert_encoding()
需要 ext/mbstring 和iconv()
需要 ext/iconv。
首先,不要使用不同的编码。它会导致混乱,而 UTF-8 绝对是你应该在任何地方使用的那个。
您的输入可能不是 ISO-8859-1,而是其他内容(ISO-8859-15、Windows-1252)。要从这些转换,请使用iconv或mb_convert_encoding
.
尽管如此,utf8_encode
并且utf8_decode
应该适用于 ISO-8859-1。如果您可以将链接发布到转换失败或产生意外结果的文件或uuencoded或base64示例字符串,那就太好了。
使用起来要好得多
$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()
UTF8
将您的输入html_entity_decode()
格式化为ISO-8859-1
.
将 head 中的元标记设置为
<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);
它是我使用和帮助很多的方法。谢谢!
您需要使用iconv包,特别是它的 iconv 功能。
我用了:
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
在我的博客http://www.unexpectedit.com/php/php-handling-non-english-characters-utf8中查看我的函数
就我而言,在上传名称包含这些字符的文件后,它们甚至在 Filezilla 中都不可见!在 Cpanel 文件管理器中,它们显示为 ? (黑色背景下)。这种组合使它在浏览器上正确显示(HTML 文档是西方编码的):
$dspFileName = utf8_decode(htmlspecialchars(iconv(mb_internal_encoding(), 'utf-8', basename($thisFile['path']))) );
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');
}
}