我是学习PHP的初学者。我正在浏览Stackoverflow中的一个帖子,其中一个字母移动了4个字符并显示结果。
这是代码:
<?php
$code = 'string';
$str = $code;
$length = strlen($str);
$result = '';
$n = 0;
for($i = 0; $i < $length; ++$i){
$c = ord($str[$i]);
if (97 <= $c && $c < 123) {
$result.= chr(($c + $n + 7) % 26 + 97);
} else if(65 <= $c && $c < 91) {
$result.= chr(($c + $n + 13) % 26 + 65);
} else {
$result.= $str[$i];
}
}
echo $result;
?>
然而,我完全不了解逻辑。值97和123是如何产生的? 援助表示感谢
非常感谢
答案 0 :(得分:3)
97和123分别是字符a
和{
的ASCII值。
字符{
是过去的z
,即122。
因此,if语句if (97 <= $c && $c < 123)
检查字符$c
是否为小写字母。
同样,else if(65 <= $c && $c < 91)
会检查$c
是否为大写字母。
请参阅ASCII Table
请注意,通过比较字符而不是ASCII值,可以更清楚地了解此代码的意图:
<?php
$str="$code";
$length=strlen($str);
$result = "";
$n=5;
$n=$n-1;
$lowercase = ord('a');
$uppercase = ord('A');
for($i = 0, $l = strlen($str); $i < $l; ++$i)
{
$c = $str[$i];
$o = ord($c);
if ('a' <= $c && $c <= 'z') {
$result.= chr(($o + $n + 7) % 26 + $lowercase);
} else if('A' <= $c && $c <= 'Z') {
$result.= chr(($o + $n + 13) % 26 + $uppercase);
} else {
$result.= $str[$i];
}
}
echo $result;
?>
答案 1 :(得分:0)
检查字符在ASCII表上的a
和b
之间
http://www.asciitable.com/
ord
函数接受一个字符串并返回第一个(或唯一的)字节的无符号二进制值。在ASCII表上,这些值可以表示为字符。
完成处理后,该代码段会将字节值转换回chr
的字符。
答案 2 :(得分:0)
chr
函数采用整数并返回由该整数表示的ASCII字符。事实证明,与97相关联的字符是a
,而与122相关联的字符是z
,因此所有这一切都是确定字符是否是小写字母字符,即a-z
。 / p>
您可以查看ASCII代码here