我正在尝试拆分文本表单字段的POST数据。 我希望使用explode()函数
按每行拆分数据首先,我检查POST结果是否有奇怪的字符;
$mails = mysql_real_escape_string($_POST["emails"]);
然后我运行它,这不起作用
$emails = explode("\r\n", $mails);
我做错了什么?不是\ r \ n?我的sql逃脱有点困扰我吗?
答案 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了解此问题:逃避不安全!