PHP - strspn - 扫描允许的字符..如何包含:\ n \ r?

时间:2016-02-23 19:14:50

标签: php

首先让我们从“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条评论作为有效的单一答案。我无能为力阻止人们回答这个问题,并希望能够回答这个问题。赚取积分可以让公司赚钱退休而死。

我很抱歉星球世界。我让你失望了。

1 个答案:

答案 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) );
}