我知道这听起来有点奇怪,但我会尽力解释。
使用此代码检查 $text
是否包含不受支持的字符:
if(!preg_match('/\A[\w .,]+\z/', $text))
{
echo "Text contains unsupported characters.";
}
现在的问题是$text
是用户在textarea中输入的文本。
$text_c = $_POST['text'];
$text = mysql_real_escape_string($text_c);
echo "<form method='post'><textarea name='text'>".$text."</textarea><br /><input type='submit' name='submit' value='Submit'></form>";
除一件事外,一切都完美无缺。例如,如果这是在文本区域中输入的文本:
Hello, my name is John.
好的。
Hello, my name is John.
I am 20 years old.
没有。文本包含不受支持的字符。 (指的是换行,因为textarea的内容发生了变化,有类似这样的内容:My name is John.\r\nI am 20 years old.
)
我的问题是:我需要更改什么以支持新行?我希望你明白。
编辑: 我刚刚发现,没有 mysql_real_escape_string
一切都完全按照我的意愿运行。是否有任何解决方案可以将 mysql_real_escape_string
与 preg_match
(在我的例子中)或 mysql_real_escape_string
应该删除?
最佳答案
您可以使用 \s
来表示空格(换行符、制表符和空格)。
所以你的正则表达式变成:/\A[\w .,\s]+\z/
注意 \n
\r
都是有效的转义字符,如果您不这样做,\r\n
一起将匹配 dos 换行符不想包含空格/制表符。
关于php - preg_match 不接受新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18670130/