![](/img/trans.png)
[英]What encoding is the resulting string if I concatenate a UTF-8 encoded string with an ASCII string in PHP?
[英]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.