我正在尝试拆分文本表单字段的 POST 数据。我希望使用explode()函数按每一行拆分数据
所以首先我检查 POST 结果中是否有奇怪的字符;
$mails = mysql_real_escape_string($_POST["emails"]);
然后我运行这个,它不起作用
$emails = explode("\r\n", $mails);
我究竟做错了什么?不是 \r\n 吗?我的 sql 转义有点搞砸了我吗?
所以首先我检查 POST 结果中是否有奇怪的字符;
$mails = mysql_real_escape_string($_POST["emails"]);
这里有一些消息:不,你没有。你只是做了一件事,却不明白你做了什么。那只是在做奇怪的事情,而不是检查一些奇怪的东西。
然后你需要在使用的行分隔符上展开。看起来不是,下"\r\n"
一次尝试"\n"
也是:"\r"
$emails = preg_split("/\R/u", $_POST["emails"], -1, PREG_SPLIT_NO_EMPTY);
(假设你有 UTF-8 输入)
您还可以将新行转换为中断,然后从<br />
s 开始:
$mails = mysql_real_escape_string(nl2br($_POST["emails"]));
$emails = explode("<br />", $mails);
尝试这样的事情:
function guessLineEndings( $aString ) {
assert( is_string( $aString ));
if ( FALSE !== strpos( $aString, "\r\n" )) {
return 1;
} else if ( FALSE !== strpos( $aString, "\n" )) {
return 2;
} else if ( FALSE !== strpos( $aString, "\r" )) {
return 3;
} else {
return -1;
}
}
请注意,如果输入是单行,您无法猜测行尾。
如果您运行动态 SQL 查询,请不要忘记这一点:
永远不要使用 mysql_real_escape_string() 进行转义!始终使用准备好的语句!