我想分割文本表單字段的POST數據。 ()函數PHP在文本字段中檢測換行符
所以我首先檢查POST結果是否有奇怪的字符;
$mails = mysql_real_escape_string($_POST["emails"]);
然後我運行它,它不工作
$emails = explode("\r\n", $mails);
我在做什麼錯?它不是\ r \ n?我的sql逃脫位讓我感到困擾嗎?
我想分割文本表單字段的POST數據。 ()函數PHP在文本字段中檢測換行符
所以我首先檢查POST結果是否有奇怪的字符;
$mails = mysql_real_escape_string($_POST["emails"]);
然後我運行它,它不工作
$emails = explode("\r\n", $mails);
我在做什麼錯?它不是\ r \ n?我的sql逃脫位讓我感到困擾嗎?
你也可以在新的生產線轉換爲休息,然後從<br />
小號爆炸:
$mails = mysql_real_escape_string(nl2br($_POST["emails"]));
$emails = explode("<br />", $mails);
所以首先我檢查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輸入)
刪除了我的和upvoted這一個。 – 2013-08-27 23:08:48
嘗試這樣:
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瞭解這一點:逃逸也不安全!
'\ r'就足以作爲分隔符 – MaveRick
在將SQL上下文實際連接到數據庫查詢(更好,至少更簡單,嘗試準備好的語句/綁定參數)之前,您不會轉義SQL上下文的輸入。線上線下有三種口味,CRLF,CR,LF;所以考慮'preg_split'和'\ R'來捕獲所有。 – mario