PHP检测文本字段中的换行符
我正在尝试拆分文本表单字段的POST数据。 我希望使用explode()函数按每行分割数据 所以首先我检查POST结果是否有奇怪的字符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?
$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