2013-08-20 80 views
2

我意外地發現,每當搜索結束時出現反斜線,點擊提交後的頁面將返回一個破損的搜索表單。搜索詞末尾的反斜槓打破自定義搜索表單

在我的情況下,提交按鈕變成了文本區域。

使用谷歌Chrome瀏覽器的「檢查元素」,我看到我的搜索形式變成了這樣:

<form method="get" action=""> 
     <input type="hidden" name="type" value="books"> 
     <input type="text" name="search" value="\">  <input type="&gt; 
    &lt;/form&gt; 
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=" sidebar"="" class="sidebar widget-area"></form> 

下面的代碼是我的形式。我猜我需要清理/轉義輸入類型文本的值?但爲什麼不是esc_attr()工作?

<form action="" method="get"> 
<input type="text" name="search" value="<?php echo esc_attr(stripslashes($_GET['search'])); ?>"> 
<input type="submit" value="Search"> 
<input type="checkbox" name="title"> 
</form> 

P.S.我正在使用此自定義搜索表單來搜索自定義字段,並使用Pods插件顯示生成的自定義帖子類型。雖然這看起來並不是Pods插件問題。

https://github.com/pods-framework/pods/issues/1620

而且,這並不似乎是來自另一個主題或插件衝突。

+0

當數據發送到您的處理腳本時,您需要轉義您的數據。當您點擊「搜索」時,向我們展示獲取調用的腳本(在服務器端)。 – user1477388

+0

我使用搜索表單和pod插件一起使用。數據由它處理,他們堅持認爲它已被轉義。他們說這可能是一個WordPress的錯誤。請參閱我的操作文章底部的鏈接。 –

+0

只有知道的方法才能打開腳本並親自查看。 – user1477388

回答

0

我已經嘗試過幾十次衛生和逃逸。但最後,只有preg_replace對付那個惱人的反斜槓。

0

我做了一些測試,我猜你的問題是missunderstood,此代碼應工作:

<form action="" method="get"> 
<input type="text" name="search" value="<?php echo urldecode($_GET['search']); ?>"> 
<input type="submit" value="Search"> 
<input type="checkbox" name="title"> 
</form> 

您可以檢查額外的信息的PHP urldecode功能。

對url進行解碼是對它進行編碼的反作用,當一個特殊字符需要被編碼時,當你想要顯示它時,你必須對它進行解碼。

編輯:
提交表單之後,當它的值被處理,則必須以使該值成爲編碼和SQL的注射劑以及其它使用esc_attr(的stripslashes($ _ GET [「搜索」]))格式問題可以避免,同樣這也必須發生在處理表單的php文件中,通常在if($ _GET)語句之後。

+0

對不起,但沒有奏效。反斜槓仍然會打破搜索表單,將提交按鈕變爲文本區域。=( 完成默認wordpress二十三個主題,沒有啓用插件 –

+0

你可以創建$ _GT ['search'];?然後在urldecode裏面回顯它的回聲並粘貼這裏的結果嗎? –

+0

好的,所以如果我搜索一個反斜槓\,'echo $ _GET ['search'];'和 'echo urldecode($ _ GET ['search']);'將得到\\和\\ –