逃避问题,我从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