2012-02-17 116 views
3

使用HTML,XML和PHP 5.3(無SQL)進行uni分配。建立一個評論網站。我有一個textarea用戶可以在其中發表評論。如果用戶輸入一個撇號,例如World's Best Uni !,當我回顯$ _REQUEST ['reviewtext']時,我會得到World's Best Uni!HTML表單,php和撇號

按摩數據的XML保存,我有以下代碼:

$cleantext1 = htmlspecialchars($_REQUEST['reviewtext']); 
substr_replace($cleantext1,"\'","'"); 
$cleantext2 = strip_tags($cleantext1); 
$cleantext3 = utf8_encode($cleantext2); 

我有回聲的,在每一步的報價仍然是世界\'最好的統一!在每一步。 我預計前兩行中的一行用html代碼替換了轉義撇號,但它似乎不起作用。

有趣的是,這個問題在我的本地XAMPP服務器上不會發生;只在我的託管網站上。

有什麼建議嗎? 謝謝, 肖恩

回答

8

您遇到的是PHP的Magic Quotes功能,它會自動轉義來自GET,POST,COOKIE的輸入。依賴此功能並不明智,並且從PHP 5.3開始不推薦使用,並且在大多數配置中(但不在Uni的配置中)默認關閉。

您可以使用get_magic_quotes_gpc()來確定是否打開了這個功能,如果是,則使用這些數據。

if (get_magic_quotes_gpc()) { 
    $val = stripslashes($_POST['val']); 
} else { 
    $val = $_POST['val']; 
} 

magic quotes reference更詳細地介紹了歷史,用法以及如何處理魔術引號。

而且,只是順便說一句,當你輸出數據,始終確保你逃避它(如htmlspecialchars(),當你處理任何不信任的信號源輸入時,請務必將其過濾(如addslashes()mysql_real_escape_string())。

+0

非常感謝!我會玩這個。 – srodden 2012-02-17 04:21:45

0

自動轉義某些字符的這種影響被稱爲「魔術引號」,並可以在php.ini配置文件中打開/關閉。顯然,在本地服務器的配置中,它在服務器上處於關閉狀態時被關閉。

欲瞭解更多信息,請查閱PHP reference瞭解「魔術報價」。

2

嘗試關閉魔術引號(一個PITA IMO!)(如上所述,當我輸入我的回覆時,drew的方法對於可移植性來說是最靈活的。 順便說一句,如果你不打算去聲明新的變量所以在你用htmlspecialchars清理文本之後,我會把它扔到$ cleanreview中,並且你沒有指定一個可以回來咬你的字符編碼。我使用UTF-8,因爲它看起來像是最前面的thinki ng編碼已被廣泛支持。

http://www.php.net/manual/en/function.htmlspecialchars.php

BTEW,我是正確的標點符號一個堅持己見的人太多所以在我的代碼輸出替換HTML實體:

$syn = str_replace("'", "’", $syn); 
$syn = str_replace("“", "「", $syn); 
$syn = str_replace("”", "」", $syn); 
$syn = str_replace(" -- ", "—", $syn); 

當然,不過這是假設UTF-8正在申報你的html(速度標籤後面的第一項)。

+0

擔心完美的標點符號超出了作業範圍:)感謝您對重複使用變量和utf8編碼的評論。 – srodden 2012-02-17 07:40:40

+0

heh。對於大多數人來說,這是超出範圍的,因爲他們不知道撇號和腳標之間的區別。只有專業的排版工,複製編輯和欣賞正確排版的人才會關心它。如果你正在爲一個個人項目做這件事,那麼通過一切手段,決定你對自己舒適的專業水平。如果這是一個針對你的工作或者客戶的項目,那麼你可能不會失去工作而不是正確地完成任務。所以,從某個角度來看,沒有必要去打擾它。 – 2012-05-08 17:33:04