我有一个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()函数。
答案 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上),它在这项任务中效率更高。
正则表达式就像一个字符串的搜索代码,非常灵活,我建议你深入研究这个主题。