我能做些什么 PHP
问题描述:
我有代码来决定是否使用回文串。我能做些什么 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>
问题代码只适用于英文符号。西里尔文符号总是打印 当我用符号打印字符串符号时。分别地,代码在俄语输入的字符串中找不到回文。
答
将您的php文件保存为utf-8而不是ansi。
答
这是因为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
得到字符串的单个字符建立自己的回文。
您需要提供更好的答案。为什么这会解决问题,它是如何完成的?提供细节。 – CodeGodie
它不起作用。到处都是UTF-8。 – soloway0000