php中的字符占据3个位置

问题描述 投票:0回答:1

我在字符串(字符数组)中遇到问题,因为一个字符占据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];

查看照片:CODE WITH THE OUTPUT

[我们注意到这个字符’在将字符串作为字符数组处理时占据3个位置,并且三个字符必须在一起才能构成正确的字符。

我遇到这种情况,当我编写的代码使我输入的字符串反向包含此字符时例如t’n => n’t有什么建议吗?

提前感谢

php arrays string reverse
1个回答
0
投票

这不起作用,我现在没有时间做更多的事情。但是您应该能够使用几个函数来检测字符编码,并在必要时进行转换。我以某种方式怀疑这是您运动的目标,但是...看起来似乎非常昂贵(计算上)。无论哪种方式,都可以在手册中搜索编码功能,然后执行类似以下的操作-您将能够处理每个字符。无论出于何种原因,我都无法在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/>';
}

抱歉,不完整,希望能对您有所帮助,或者比我自己更精通的人可以参加...


0
投票

[那个字符是正确的单引号,U + 2019(数字为十六进制)。在UTF-8中,它的编码为e2 8099。因此,当您反转74 e2 80 99 6e时,您需要使6e e2 80 99 74。

您可以按如下所示在字节字符串中处理此问题:

  • 迭代$ i从$ input的结尾到开头。
  • 如果$ input [$ i]在0到127之间(包括0和127之间,请将其复制到$ output的末尾。)>
  • 如果$ input [$ i]在128和191之间(或者,如果对char进行了签名,则在-128和-65之间,请保留它。
  • 如果$ input [$ i]在192和255之间(-64和-1),请将其和保留的字节作为一个块复制到$ output的末尾。
  • 以UTF-8编码的所有Unicode字符要么是一个7位字符,高字节清零,要么是一个多字节序列,其中第一个字节从11开始,其余所有字节从10开始。

UTF-8中存在无效的字节序列(例如,您永远不会看到字节fe和ff);您如何处理它们取决于您。

© www.soinside.com 2019 - 2024. All rights reserved.