PHP检测文本字段中的换行符

时间:2013-08-27 22:32:23

标签: php forms

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

按每行拆分数据

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

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

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

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

我做错了什么?不是\ r \ n?我的sql逃脱有点困扰我吗?

3 个答案:

答案 0 :(得分: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输入)

答案 1 :(得分:2)

你也可以将新行转换为符号,然后从<br /> s:

中爆炸
$mails = mysql_real_escape_string(nl2br($_POST["emails"]));
$emails = explode("<br />", $mails);

答案 2 :(得分: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()!始终使用准备好的陈述!

请审核OWASP PHP Security Cheat Sheet了解此问题:逃避不安全!