我有代码确定是否为回文字符串。
<!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与西里尔符号。分别在俄语输入的字符串中找不到代码。
答案 0 :(得分: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
来计算字符串的单个字符以构建其字符回文。
答案 1 :(得分:0)
将您的php文件保存为utf-8而不是ansi。