Php utf8_decode仅返回编码字符串的一部分

Php utf8_decode仅返回编码字符串的一部分,php,encoding,utf-8,Php,Encoding,Utf 8,我有一个utf-8格式的文本,我想使用utf8\u decode() 但是当我这样做时,我丢失了一部分文本,utf8\u decode()对字符串进行解码,直到它找到一个字符 有什么办法可以解决这个问题吗?也许iconv可以帮助你也许iconv可以帮助你也许不在ISO-8859-1中?utf8\u decode只吃同样存在于ISO-8859-1中的utf8字符。也许不在ISO-8859-1中“不在ISO-8859-1中?utf8\u decode只吃同样存在于ISO-8859-1中的utf8字符

我有一个utf-8格式的文本,我想使用
utf8\u decode()

但是当我这样做时,我丢失了一部分文本,
utf8\u decode()
对字符串进行解码,直到它找到一个字符
有什么办法可以解决这个问题吗?

也许iconv可以帮助你

也许iconv可以帮助你

也许
不在ISO-8859-1中?
utf8\u decode
只吃同样存在于ISO-8859-1中的utf8字符。

也许
不在ISO-8859-1中“
不在ISO-8859-1中?
utf8\u decode
只吃同样存在于ISO-8859-1中的utf8字符。

您可能需要类似的东西:

$string = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string);

您可以在中阅读有关iconv的更多信息。根据您的使用情况,IGNORE可能比Translat更有用。

您可能需要类似的内容:

$string = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string);
†= E2 80 = 1110 0010 1000 0000
您可以在中阅读有关iconv的更多信息。根据您的使用,IGNORE可能比Translat更有用

†= E2 80 = 1110 0010 1000 0000
如果这是你的UTF-8文本中的字面意思,那么它可能不是UTF-8。它后面需要有一个从10开始的八位组才有效

这是因为一个从1110开始的八位字节引入了一个三个八位字节的序列,下面的八位字节从10开始,以提供总共16个字节的“有效负载”,从而给出Unicode代码点

编辑:您已经提供了下一个字符0x93=1001001001,这将是有效的。UTF-8序列0xE28093=0010 00 0000 01 0011=0x2013是一个。因此,它看起来似乎还是合理的UTF-8

如果这是你的UTF-8文本中的字面意思,那么它可能不是UTF-8。它后面需要有一个从10开始的八位组才有效

这是因为一个从1110开始的八位字节引入了一个三个八位字节的序列,下面的八位字节从10开始,以提供总共16个字节的“有效负载”,从而给出Unicode代码点

编辑:您提供的下一个字符为0x93=1001001 0011,这将是有效的。UTF-8序列0xE28093=0010 00 0000 01 0011=0x2013是一个。因此,它看起来似乎是合理的UTF-8!您确定它不起作用吗

尝试强制浏览器将输出处理为
iso-8859-1
。为此,您需要一个包含字符串的utf8编码文件(您需要这样做,因为文本编辑器可能使用不可见的,浏览器可能会根据定义的iso-8859-2切换到UTF-8),另一个文件使用ansi编码的php代码(我使用它只是为了确保编码正确-它检测文件的编码并在右下角显示,您也可以在编码之间转换)

因此,用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";

你确定那不行吗

尝试强制浏览器将输出处理为
iso-8859-1
。为此,您需要一个包含字符串的utf8编码文件(您需要这样做,因为文本编辑器可能使用不可见的,浏览器可能会根据定义的iso-8859-2切换到UTF-8),另一个文件使用ansi编码的php代码(我使用它只是为了确保编码正确-它检测文件的编码并在右下角显示,您也可以在编码之间转换)

因此,用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";



utf8\u decode
将UTF-8转换为ISO 8859-1。你可以去掉ISO 8859-1中没有的字符。我知道我可能会丢失字符。但是你会发现,虽然某个字符不包含特殊字符,但丢失后有一半文本是正常的。使用iconv,即使使用
//忽略
注意:iconv():在输入字符串中检测到非法字符
Any idea?
utf8\u decode
从UTF-8转换为ISO 8859-1。您可以释放ISO 8859-1中未包含的字符。我知道我可能会丢失字符。但您发现,丢失特定字符后的一半文本是正常的,尽管它不包含特殊字符?使用iconv我可以获得即使使用
//IGNORE
注意:iconv():在输入字符串中检测到非法字符
任何想法的***…问题都可能来自数据的保存方式(我尝试从另一个数据库导入,该数据库将utf8编码的字符串存储在utf8_general_ci表中,但在连接时不使用MySQL
设置名称“utf8”
,当我通过phpmyadmin查看时,我看到这样的字符:équipes,一切都很顺利,直到我发现了带有“序列”的情况……)确切地说,我在文本中看到的是:
S***……问题可能来自数据的保存方式(我尝试从另一个数据库导入,该数据库将utf8编码的字符串存储在utf8_general_ci表中,但在连接时不使用MySQL
设置名称“utf8”
,当我通过phpmyadmin查看时,我看到这样的字符:équipes,一切都很顺利,直到我发现了带有“序列”的情况……)确切地说,我在文本中看到的是:
根据文档中的注释,
//TRANSLIT//IGNORE
选项也是可能的,对一些人来说解决了这个问题。我自己没有测试过,但可能值得一试。根据文档中的注释,
//TRANSLIT//IGNORE
选项也是可能的,对一些人来说解决了问题。我还没有亲自测试过,但可能值得一试。@Serty您可以尝试
iconv(“UTF-8”、“UTF-8//IGNORE”、$str);
以过滤掉坏字符。有关更多信息,请参阅。我只是尝试了这个方法。它不会删除有问题的字符。并且在再次剪切句子后进行解码:/@Serty我已成功地在其他PHP安装上复制了错误,因此使用po编辑了答案