2011-12-28 87 views
0

我創建了一個使用PHP和XML的單詞字典。用戶在網頁表單上的輸入框中輸入查詢,並將該值與使用PHP的XML文件中的單詞進行比較。任何與搜索詞匹配的標籤都會返回到HTML表格中。包含撇號的相同字符串的比較失敗

整體搜索工作正常,只有一個主要問題。我有一個選項,用戶可以檢查以查找完全匹配。當此框被選中時,PHP腳本會進行簡單的if ($searchterm == $xmlTagNodeValue)比較。它會正確返回每個字符串,包括帶有非字母字符(如連字符和下劃線)的字符串,並帶有一個例外:包含撇號的字符串。

換句話說,can't輸入到輸入框在某種程度上是不是在XML文件中等於can't

我完全失敗。我絕對肯定這是兩個字符串中的相同字符。我甚至嘗試通過複製和粘貼XML文件中的值來對輸入框的值進行硬編碼,並在相同的文本編輯器中打開這兩個文件。但是比較總是返回錯誤。

我可以想象的唯一的事情就是它是某種編碼問題,並且這些字符可能看起來相同但具有不同的值。但是,XML文件保存爲UTF-8(如果相關,則不包含BOM),並且網頁正在以UTF-8格式查看,所以我不確定我還能做什麼。

+0

任何逃脫在某個點上? – 2011-12-28 02:14:44

+0

你使用十六進制編輯器來確認兩個'''有相同的代碼點嗎? – alex 2011-12-28 02:15:20

+0

嗯......有趣。我用'filter_input'和'FILTER_SANITIZE_STRING'來抓取輸入。當我停止這樣做並僅使用'$ _REQUEST'時,字符串現在顯示爲'can''t',在撇號之前帶有反斜槓。現在,我只需要一種方法來弄清楚如何阻止它...... – 2011-12-28 02:24:16

回答

0

它可能不是一個編碼問題,而是兩個「撇號」實際上是兩個不同的unicode字符。看看U+0027。 「另請參見」部分列出了六個類似的其他可能的unicode字符。這兩個字符串可能包含相似但看起來不同的字符。您可能想嘗試將每個字符轉換爲數字來確認或反駁這個理論。

+0

好吧,現在我*完全*困惑。我用'ord()'來比較兩者。在XML中的一個返回爲'39',但輸入框中的一個(在通過消毒劑後)是'38' .... – 2011-12-28 02:40:38

+0

除非...因爲38是&符號,所以大概PHP是吐出來的像'''... ...? – 2011-12-28 02:45:23

+0

好吧,我仍然不完全確定發生了什麼,但最終我只是做了一個自定義過濾器。很顯然,問題出在FILTER_SANITIZE_STRING上,或者由於我對其工作原理的不完全理解而更加精確。非常感謝,夥計們! – 2011-12-28 03:10:30