首先让我们从“c
”中删除字母“$allowed=
”,然后测试一下。
test.php的
<?php
echo '
<form method="post" action="/test.php">
<textarea name="a">abc
d</textarea>
<input type="submit">
</form>
';
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$string = $_POST["a"];
$allowed = 'abdefghijklmnopqrstuvwxyz';
$scan = strspn($string, $allowed);
if ($scan < strlen($string)){
echo "problem occurs right after: $scan";
echo "<br>the problematic character is:". substr($string, $scan,1);
}
}
?>
让我们看一下点击“提交”后浏览器打印的内容。
problem occurs right after: 2
the problematic character is:c
效果很好。它说“c”不在允许列表中。因此发现了一个问题。
现在让我们将“c”放回“$allowed
”列表中。
$allowed = 'abcdefghijklmnopqrstuvwxyz';
现在让我们再次提交表格..
让我们看看浏览器打印的内容。
problem occurs right after: 3
the problematic character is:
冷却。它说问题发生在第3个字符之后。换句话说,必须在html表格中的字母“c”之后。必须是“新线”的事情。
“$allowed
”列表中没有“新行”。错误是合乎逻辑的。
但这是它失败的地方......它说..
the problematic character is:
它没有提供任何可以使用的数据。
我怎么想知道哪个字符需要添加到$allowed
列表中,如果它没有告诉我冲突的字符是什么?
这个假设似乎是“\ n \ r”冲突。
好吧..让我们在“$ allowed =”列表中添加“\n\r
”,看看会发生什么。
$allowed = 'abcdefghijklmnopqrstuvwxyz\n\r';
那里......全新...全新的“$ allowed”。
让我们再次在html表单上提交。
浏览器的输出:
problem occurs right after: 3
the problematic character is:
看起来像全新的“$ allowed”列表中的“\ n \ r”是完全没用的。
test.php是一个单独的php脚本。随意复制..测试它。这是行不通的。
首先必须工作 第二,它需要告诉我有问题的人物是什么 所以我可以直观地看到它。
更新 答案的第一部分来自发布的评论
单引号中的'\ n'被视为'\'和'n' - u_mulder 2 m
遗憾的是无法选择,因为它只是一个评论。
我也在寻找答案的另一部分..如何让它在浏览器上以可视方式打印,所以我知道我想添加
\n\r
到允许列表。
我可能是一个来自不同星系的外星人......我怎么知道
除非有stackoverflow等编程网站,否则\ n \ r \ n需要添加到列表中?
更新2
答案的第二部分来自评论
回声.... json_encode(substr($ string,$ scan,1)); - 刚刚结束
显然,答案来自2个不同的人,并以评论的形式出现。
此网站不允许选择2条评论作为有效的单一答案。我无能为力阻止人们回答这个问题,并希望能够回答这个问题。赚取积分可以让公司赚钱退休而死。
我很抱歉星球世界。我让你失望了。
答案 0 :(得分:0)
您可以通过以JSON编码格式输出任何角色,这样就可以看到换行符被打印为"\n"
。
其次,您需要使用双引号将PHP解释为\n
作为换行符。使用单引号时,它将被视为文字字符\
和n
:
$allowed = "abcdefghijklmnopqrstuvwxyz\n\r";
$scan = strspn($string, $allowed);
if ($scan < strlen($string)) {
echo "problem occurs right after: $scan";
echo "<br>the problematic character is:".
json_encode( substr($string, $scan,1) );
}