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

PHP检测文本字段中的换行符,php,forms,Php,Forms,我正在尝试拆分文本表单字段的POST数据。 我希望使用explode()函数按每行分割数据 所以首先我检查POST结果是否有奇怪的字符 $mails = mysql_real_escape_string($_POST["emails"]); $mails = mysql_real_escape_string($_POST["emails"]); 然后我运行这个,它不工作 $emails = explode("\r\n", $mails); 我做错了什么?不是吗\r\n?

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

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

$mails = mysql_real_escape_string($_POST["emails"]);
$mails = mysql_real_escape_string($_POST["emails"]);
然后我运行这个,它不工作

$emails = explode("\r\n", $mails);
我做错了什么?不是吗\r\n?我的sql escape有点把我搞砸了吗

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

$mails = mysql_real_escape_string($_POST["emails"]);
$mails = mysql_real_escape_string($_POST["emails"]);
这里有一些消息:不,你没有。你只是做了一些事情,却不知道自己做了什么。这只是做一些奇怪的事情,而不是检查一些奇怪的事情

然后需要在使用的行分隔符上分解。看起来不是
“\r\n”
,下一次尝试是
“\n”
“\r”

(假设您有UTF-8输入)

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

$mails = mysql_real_escape_string($_POST["emails"]);
$mails = mysql_real_escape_string($_POST["emails"]);
这里有一些消息:不,你没有。你只是做了一些事情,却不知道自己做了什么。这只是做一些奇怪的事情,而不是检查一些奇怪的事情

然后需要在使用的行分隔符上分解。看起来不是
“\r\n”
,下一次尝试是
“\n”
“\r”


(假设您有UTF-8输入)

您还可以将新行转换为换行符,然后从

s分解:

$mails = mysql_real_escape_string(nl2br($_POST["emails"]));
$emails = explode("<br />", $mails);
$mails=mysql\u real\u escape\u字符串(nl2br($\u POST[“emails”]);
$emails=explode(“
,$mails”);
您还可以将新行转换为换行符,然后从

s分解:

$mails = mysql_real_escape_string(nl2br($_POST["emails"]));
$emails = explode("<br />", $mails);
$mails=mysql\u real\u escape\u字符串(nl2br($\u POST[“emails”]);
$emails=explode(“
,$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\u real\u escape\u string()之类的转义!始终使用准备好的语句


请评论了解这一点:逃跑不安全

试试这样的方法:

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\u real\u escape\u string()之类的转义!始终使用准备好的语句


请评论了解这一点:逃跑不安全

\r
作为分隔符就足够了。在将SQL上下文的输入连接到数据库查询之前,您不需要对其进行转义(最好,至少更简单,可以尝试预处理语句/绑定参数)。断线有三种味道,CRLF,CR,LF;因此,请考虑<代码> PrggSpule和<代码> \r>代码>以捕获所有。<代码> \r>代码>就足够了,因为DelimType您不必逃避SQL上下文的输入,实际上将其连接到一个数据库查询(至少更好,更简单,尝试准备的语句/绑定的参数)。断线有三种味道,CRLF,CR,LF;因此,请考虑<代码> PrggSpule和<代码> \r>代码>以捕获ALL。您正在寻找具有特定字符序列的至少一次,“分解”很可能不是最好的查找方法。实际上,在您的情况下,您可以查找\r和\n,然后如果它们紧跟在一起,或者是哪一个先出现:Dyou正在查找至少一次特定的字符序列,“爆炸”很可能不是最好的查找方法。实际上,在您的情况下,您可以查找\r和\n,然后确定它们是否在后面,或者是哪一个在前面:D