繁体   English   中英

什么将我的UTF-8字符串更改为ASCII?

[英]What changes my UTF-8 string to ASCII?

我有以下代码:

$string = $this->getTextFromHTML($html);

echo mb_detect_encoding($string, 'ASCII,UTF-8,ISO-8859-1');

$stringArray = mb_split('\W+', $string);
$cleaned = array();
foreach($stringArray as $v) {
    $string = trim($v);
    if(!empty($string))
        array_push($cleaned, $string);
}

echo mb_detect_encoding($stringArray[752], 'ASCII,UTF-8,ISO-8859-1');

以上回报:

// UTF-8
// ASCII

我的代码的哪一部分将我的字符串转换为ASCII 或者我错误地检测到编码?

字符串没有实际的关联编码,它们只是字节数组。 mb_detect_encoding不告诉你字符串的编码,它只是试图检测它。 这意味着它需要一些猜测(你的第二个参数)并告诉你第一个有效的。

您的原始字符串可能包含一些非ASCII字符,因此ASCII不是有效的编码,但UTF-8是。 当您稍后测试原始子字符串时,该子字符串可能只包含在ASCII中有效的字符,并且因为ASCII是第一个经过测试的编码,所以这就是猜测结果。 任何ASCII字符串也是有效的UTF-8,因此没有发生实际问题或“转换”。

正如注释中提到的@Phylogenesis,0x7F下的ASCII字符是有效的UTF-8。 除非数据中有字节顺序标记 ,否则文本都是有效的ASCII和UTF-8。 您已指定ASCII是UTF-8之前的选项,因此会返回。

例如: https//ideone.com/DupS4A

<?php

$str = "apple";
// Returns ASCII
var_dump(mb_detect_encoding($str, "ASCII, UTF-8"));

// 0xEFBBBF is the byte order mark in UTF-8
$str_with_bom = chr(0xEF) . chr(0xBB) . chr(0xBF) . "apple";
// Returns UTF-8
var_dump(mb_detect_encoding($str_with_bom, "ASCII, UTF-8"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM