2016-02-19 2 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 extension, mb_strlen для подсчета символов (вместо байтов с strlen) и mb_substr, чтобы получить один символ строки, чтобы построить свою палиндром.

Смежные вопросы