1

我正在尝试拆分文本表单字段的 POST 数据。我希望使用explode()函数按每一行拆分数据

所以首先我检查 POST 结果中是否有奇怪的字符;

$mails = mysql_real_escape_string($_POST["emails"]);

然后我运行这个,它不起作用

$emails = explode("\r\n", $mails);

我究竟做错了什么?不是 \r\n 吗?我的 sql 转义有点搞砸了我吗?

4

3 回答 3

2

所以首先我检查 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 输入)

于 2013-08-27T22:35:45.737 回答
2

您还可以将新行转换为中断,然后从<br />s 开始:

$mails = mysql_real_escape_string(nl2br($_POST["emails"]));
$emails = explode("<br />", $mails);
于 2013-08-27T22:36:36.273 回答
0

尝试这样的事情:

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() 进行转义!始终使用准备好的语句!

请查看OWASPPHP 安全备忘单以了解这一点:转义是不安全的!

于 2013-08-27T22:37:48.740 回答