2010-08-16 67 views
2

所以我使用mysql_real_escape_string來清理一些用戶輸入之前,它進入數據庫,我想知道我如何去「倒轉」這個功能,這樣,當我輸出到屏幕所有逃脫的字符,如/ n/r獲取轉換爲實際的新行......謝謝!如何在使用mysql_real_escape_string後正確格式化文本?

另外,/ n和/ r之間的區別是什麼?

回答

1

mysql_real_escape_string()不加斜槓存儲數據。它轉義字符,以便它們可以通過mysql引擎安全地傳遞。數據按原樣存儲,沒有斜槓。

因此,從數據庫輸出任何與其一起轉義的數據時,您不需要使用stripslashes()

如果你看到額外的斜槓,這是因爲你要麼在某處添加它們,比如說addslashes()magic_quotes_gpc()已打開。

如前所述\ r \ n不逃脫,他們是換行符。僅對包含轉義斜槓的數據使用stripslashes(),否則您可能會刪除重要的斜線。

編輯補充: 你想從mysql_real_escape_string()剝離斜線的唯一情況是,如果你存儲數據之前這樣做,說如果你因爲某些原因轉義的數據從一種形式得到了它的分鐘,然後呼應出來在錯誤消息/預填充表單字段中。

+0

*唯一一次你想從'mysql_real_escape_string()'去除斜槓是... *不要這樣做。 'mysql_real_escape_string()'應該只在查詢之前立即使用,因爲它專門爲活動數據庫連接執行。如果您在代碼的其他地方需要這種類型的功能,請使用不同的轉義/清理程序。 – cbednarski 2010-08-16 23:53:45

1

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

編輯清洗這件事作爲顯然這是很難理解的。

+0

他不需要除了'nl2br()'函數以外的其他任何東西,但是我給他提供了反斜槓和手動鏈接。 – Robert 2010-08-16 23:21:10

+0

我沒有告訴他對從數據庫中出來的所有東西運行這個命令,停止像我一樣行事。我說過,如果他沒有看到任何斜槓輸出,它將刪除任何斜槓,沒有理由運行命令。 – Robert 2010-08-16 23:33:38

相關問題