所以我使用mysql_real_escape_string來清理一些用戶輸入之前,它進入數據庫,我想知道我如何去「倒轉」這個功能,這樣,當我輸出到屏幕所有逃脫的字符,如/ n/r獲取轉換爲實際的新行......謝謝!如何在使用mysql_real_escape_string後正確格式化文本?
另外,/ n和/ r之間的區別是什麼?
所以我使用mysql_real_escape_string來清理一些用戶輸入之前,它進入數據庫,我想知道我如何去「倒轉」這個功能,這樣,當我輸出到屏幕所有逃脫的字符,如/ n/r獲取轉換爲實際的新行......謝謝!如何在使用mysql_real_escape_string後正確格式化文本?
另外,/ n和/ r之間的區別是什麼?
mysql_real_escape_string()
不加斜槓存儲數據。它轉義字符,以便它們可以通過mysql引擎安全地傳遞。數據按原樣存儲,沒有斜槓。
因此,從數據庫輸出任何與其一起轉義的數據時,您不需要使用stripslashes()
。
如果你看到額外的斜槓,這是因爲你要麼在某處添加它們,比如說addslashes()
或magic_quotes_gpc()
已打開。
如前所述\ r \ n不逃脫,他們是換行符。僅對包含轉義斜槓的數據使用stripslashes()
,否則您可能會刪除重要的斜線。
編輯補充: 你想從mysql_real_escape_string()
剝離斜線的唯一情況是,如果你存儲數據之前這樣做,說如果你因爲某些原因轉義的數據從一種形式得到了它的分鐘,然後呼應出來在錯誤消息/預填充表單字段中。
stripslashes($variableHere)
將從$variableHere
中刪除任何斜槓,只有在字符串中有斜線時才應使用它。 mysql_real_escape_string()
保留初始字符串,所以無論你傳遞什麼,它都將被輸入到數據庫中。有關更多信息,請參閱下面的php.net手冊。
就你\ n和\ r字符的例子而言,它們將被自然狀態保存mysql_real_escape_string()
,但如果你將\ n和\ r直接回顯到HTML中,它不會顯示換行符,爲此必須使用nl2br($string)
。
http://php.net/manual/en/function.stripslashes.php
http://php.net/manual/en/function.nl2br.php
編輯清洗這件事作爲顯然這是很難理解的。
*唯一一次你想從'mysql_real_escape_string()'去除斜槓是... *不要這樣做。 'mysql_real_escape_string()'應該只在查詢之前立即使用,因爲它專門爲活動數據庫連接執行。如果您在代碼的其他地方需要這種類型的功能,請使用不同的轉義/清理程序。 – cbednarski 2010-08-16 23:53:45