我能用 PHP做些什么

时间:2016-02-19 20:37:04

标签: php html sql

我有代码确定是否为回文字符串。

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" charset="utf-8">
    <title>Document</title>
</head>
<body>
<form action=pal.php method="get">
<input type="text" name="str">
    <input type="submit">
    </form>
<?php
if (isset($_GET['str']))
{$k=0;$n=0;
     $xr=$_GET['str'];

    if($xr == convert_cyr_string($xr , 'w' , 'k'))
    {
        $n=1;
    }
    else
        $n=2;

     $x=str_replace(" ","",$xr);

    echo "dlina: ".strlen($x)/$n."<br>";

        for ($i=0;$i<strlen($x)/$n;$i++)
          {
        #echo $x[$i]."<br>";

             if ($x[$i]==$x[strlen($x)/$n-$i-1])
             $k++;
              echo $x[$i]."<br>";
           }
           if ($k==strlen($x)/$n)
            echo "PALINDROM";
            else echo "ne palindrom<br>";



    $backurl="http://s2.localhost/project1/php/send_list/pal.php";
    print "<script language='Javascript'><!--
function reload() {location = \"$backurl\"}; setTimeout('reload()', 10000);
//--></script>";
}



?>

</body>
</html>

问题:代码仅适用于英文符号。当我用符号打印字符串符号时,它总是打印c与西里尔符号。分别在俄语输入的字符串中找不到代码。

2 个答案:

答案 0 :(得分:4)

这是因为UTF-8是多字节编码,而您正在处理单字节

$string = 'aйb';
echo $string[3]; // b
echo $string[2]; // �
echo $string[1]; // �
echo $string[0]; // a

在此示例中,й使用两个字节进行编码。如果以相反的顺序读取它们,则会破坏字符串。

您应该使用mb extensionmb_strlen来计算字符(而不是带有strlen的字节数)和mb_substr来计算字符串的单个字符以构建其字符回文。

答案 1 :(得分:0)

将您的php文件保存为utf-8而不是ansi。