我在字符串(字符数组)中遇到问题,因为一个字符占据3个位置,这使我的代码产生了意外的结果
检查此代码:
<?php
$input1="t’n";
for($i=0;$i<strlen($input1);$i++){
echo $input1[$i] .'<br/>';
}
echo '<br>'.'=================='.'<br>';
$input2='test';
for($i=0;$i<strlen($input2);$i++){
echo $input2[$i] .'<br/>';
}
echo '<br>'.'Strange ===> ';
echo $input1[1].$input1[2].$input1[3];
[我们注意到这个字符’在将字符串作为字符数组处理时占据3个位置,并且三个字符必须在一起才能构成正确的字符。
我遇到这种情况,当我编写的代码使我输入的字符串反向包含此字符时例如t’n => n’t有什么建议吗?
提前感谢
这不起作用,我现在没有时间做更多的事情。但是您应该能够使用几个函数来检测字符编码,并在必要时进行转换。我以某种方式怀疑这是您运动的目标,但是...看起来似乎非常昂贵(计算上)。无论哪种方式,都可以在手册中搜索编码功能,然后执行类似以下的操作-您将能够处理每个字符。无论出于何种原因,我都无法在CLI中成功调用convert函数。
<?php
$input1="t’n";
for($i=0;$i<strlen($input1);$i++){
if(mb_detect_encoding($input1[$i], "auto", true) == mb_internal_encoding()){
echo $input1[$i] .'<br/>';
}
else{
echo mb_convert_encoding($input1[$i], mb_internal_encoding(), "auto")
}
}
echo '<br>'.'=================='.'<br>';
$input2='test';
for($i=0;$i<strlen($input2);$i++){
echo $input2[$i] .'<br/>';
}
抱歉,不完整,希望能对您有所帮助,或者比我自己更精通的人可以参加...
[那个字符是正确的单引号,U + 2019(数字为十六进制)。在UTF-8中,它的编码为e2 8099。因此,当您反转74 e2 80 99 6e时,您需要使6e e2 80 99 74。
您可以按如下所示在字节字符串中处理此问题:
以UTF-8编码的所有Unicode字符要么是一个7位字符,高字节清零,要么是一个多字节序列,其中第一个字节从11开始,其余所有字节从10开始。
UTF-8中存在无效的字节序列(例如,您永远不会看到字节fe和ff);您如何处理它们取决于您。