逃避問題,我從PHP的XML文件使用XPath像檢索數據。現在我正從AJAX請求中構建屬性查詢,如下所示:SimpleXML中的XPath查詢
$attributeQuery = '';
for ($i = 0; $i < count($queryArray); $i++){
$attributeQuery .= '@'.$keys[$i].'="'.addslashes($values[$i]).'"'; //outputs `@key="value"`
if ($i + 1 != count($queryArray)){ //string needs another ' and ' if not last element
$attributeQuery .= ' and ';
}
}
$path = '///Region['.$attributeQuery.']/..';
當我使用標準的單字國名時,此工作正常。當我查找包含單引號的名稱時,麻煩開始:Lao People's Democratic Republic
。我查詢構造函數返回:
'///Region[@country="Lao People\'s Democratic Republic"]/..'
在這種情況下
,這也能正常工作,當我硬編碼到XPath的要求,但是當我用$attributeQuery
-variable喜歡$xml -> xpath($path);
失敗並返回一個空的結果?有問題的節點在我的XML確實存在(它在硬編碼查詢發現...):
...
<Region continent="Asia" country="Lao People's Democratic Republic" state="" subcontinent="South-Eastern Asia" />
...
說實話我有點疑惑什麼可能導致這一點,我想這是一些轉義問題,但我不知道它來自哪裏。此外,我不明白爲什麼硬編碼字符串將工作,並使用該變量不會?有什麼關於我在這裏失蹤的addslashes
的內部工作?
編輯:
所以,我發現了什麼是從我的查詢字符串連接去除addslashes
爲不知何故在我的$_GET
似乎已經躲過值修正我的問題。奇怪的是,我確實關閉了Magic Quotes(在運行時檢查它也返回了0
),並且從我在文檔中可以讀到的內容中,我的字符串應該發生的唯一情況是,在發送客戶端請求之前,它們將由jQuery進行URL編碼,並在服務器端處理之前進行URL解碼。
所以發生的是下面的,我做這在我的JS:
params.country = $(this).val(); //returns "Lao People's Democratic Republic"
$.getJSON('getMapData.php',params,function(data){...
服務器執行以下操作:
$vals = array_values($_GET);
$keys = array_keys($_GET);
與$vals
值不知何故神奇地逃脫了。
雖然事情目前工作正常,有誰可以說明爲什麼會發生這種情況嗎?
感謝。顯然,對我來說「問題」似乎是,雖然我已通過'php_flag magic_quotes_gpc關閉 '(運行時檢查也會返回'0')禁用了Magic Quotes,但我的$ _GET值仍然會自動轉義刪除'addslashes'解決了我的問題)。你有什麼想法爲什麼這可能會發生?據我所知,$ _GET應該只是'urldecode'd,對吧? – m90
是的,它通過'urldecode'傳遞。嗯,我無法從這裏告訴它究竟發生了什麼,也許AJAX電話是責怪? –
聽起來很合理,但我找不到jQuery文檔中的任何內容,它只是說在發送請求之前將對數據進行url解碼。我會編輯我的問題。 – m90