PHP - strspn($ input,$ allowed_chars)似乎无法使用“\ r \ n”

时间:2016-02-23 17:15:35

标签: php

我有一个textarea框

<textarea>abc
d</textarea>

我把它发布到php脚本。

在PHP脚本中我有..:

$a = $_POST["a"];
$allowed_chars= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 .<>="';
$scan = strspn($a, $allowed_chars);
if ($scan < strlen($a)){
echo "not allowed char after the $scan : ". substr($a, $scan,1)
}

这将在网络浏览器上打印出来:

  not allowed char after the 3 :
显然新线路是一个问题。

我想知道我可以添加到我的

  $allowed_chars

列表。我尝试添加

\\

(向前逃跑?向后冲?斜线)

它不起作用。

之后

  not allowed char after the 3 :

假设告诉我造成问题的角色,但它只是空的......什么都没显示。如何设计它可以显示冲突的角色?

更新

这不起作用

$a = $_POST["a"];
$allowed_chars= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 .<>="\r\n';
$scan = strspn($a, $allowed_chars);
if ($scan < strlen($a)){
echo "not allowed char after the $scan : ". substr($a, $scan,1)
}

(将\ r \ n添加到列表中)

更新2

这也行不通:

$allowed_chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 "\r\n"';

更新3 解决方案似乎首先在“$ input”上使用php的nl2br()函数。

2 个答案:

答案 0 :(得分:0)

在那篇文章中 Escape Regex Newline 你可以看到,创建一个新行char是:&#39; \ n&#39; 所以对于regexp来说可能是&#39; \ n&#39; 然后你可以像之前说的那样添加\ 期待帮助你

答案 1 :(得分:0)

您的脚本存在的问题是新行是多个字符,用于定义不同的字符。当您声明 \ r \ n 时,这意味着您已经在Windows上运行,而且此代码也无法在Linux服务器上运行。

我不确定您尝试做什么,但从代码中我认为最好使用正则表达式。

$s = 'some string I want to see the data on.';
$var = preg_match ( '/[A-z0-9].*/' , $s , $m);
print_r($m);

在这种情况下,它只会在换行符之前获取数据,这也与Linux兼容。

这,除非你在正则表达式中使用多行修饰符。然后,您可以检查count($m)是否大于1,这意味着它有多个匹配。

正则表达式[A-z0-9].*表示在A-Z&amp; A范围内匹配a-z&amp; 0-9。因为正则表达式运行在较低级别,然后是PHP(在CPU上),它在这项任务中效率更高。

正则表达式就像一个字符串的搜索代码,非常灵活,我建议你深入研究这个主题。