我在utf-8中有一个文本,我想使用utf8_decode()
来解码它
但是当我这样做时,我丢失了部分文本,utf8_decode()
对字符串进行解码,直到找到字符–
为止
有什么想法解决这个问题吗?
答案 0 :(得分:2)
也许iconv可以帮到你
答案 1 :(得分:2)
†= E2 80 = 1110 0010 1000 0000
如果这确实是你的UTF-8文本中的内容,那么它可能不是UTF-8。它需要跟随另一个八位字节开始10才有效。
这是因为从1110开始的八位字节引入了一个三个八位位组序列,后面的八位字节从10开始,总共提供16个字节的“有效负载”以提供Unicode代码点。
编辑:您提供了下一个字符为0x93 = 1001 0011,这将是有效的。 UTF-8序列0xE28093 = 0010 00 0000 01 0011 = 0x2013,这是EN DASH。所以,它看起来似乎是合理的UTF-8!
答案 2 :(得分:1)
也许–
不在ISO-8859-1中? utf8_decode
只吃掉ISO-8859-1中也存在的utf8字符。
答案 3 :(得分:1)
你可能想要类似的东西:
$string = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string);
您可以在the documentation中详细了解iconv。根据您的使用情况,IGNORE可能比TRANSLIT更有用。
答案 4 :(得分:1)
您确定EdoDodo's code无效吗?
尝试强制浏览器将输出处理为iso-8859-1
。要做到这一点,你需要一个带有字符串的utf8编码文件(你需要这个,因为文本编辑器可能使用不可见的UTF-8 BOM,并且浏览器可能会针对定义的ISO-8859-2切换到UTF-8 ),另一个用ansi编码的php代码(我使用Notepad++只是为了确保编码是正确的 - 它检测文件的编码并显示在右下角,你可以转换编码之间也是如此。
所以用utf-8编码创建一个名为 utf8.txt 的文件,其中只包含字符串:
–
使用以下内容创建ANSI编码的 index.php 文件:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
$str = file_get_contents('utf8.txt');
echo "iconv(//IGNORE//TRANSLIT): " . iconv("UTF-8", "ISO-8859-1//IGNORE//TRANSLIT", $str) . "<br>\n";
对于网页,我强烈建议您始终使用UTF-8编码,即使它是英文的。