2016-02-19 113 views
-3

我有代码来决定是否使用回文串。我能做些什么 PHP

<!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> 

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

回答

0

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

+0

您需要提供更好的答案。为什么这会解决问题,它是如何完成的?提供细节。 – CodeGodie

+0

它不起作用。到处都是UTF-8。 – soloway0000

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得到字符串的单个字符建立自己的回文。

相关问题