在我的PHP脚本中,我使用XPATH搜索文本节点。一切都会顺利进行 - 除了我用撇号搜索单词时。php xpath处理撇号/搜索文本中的单引号
基本上我的代码看起来像这样
$keyword = $_GET['keyword'];
...snip...
$xml = simplexml_load_file($data);
$search = strtolower($keyword);
$upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$lower = "abcdefghijklmnopqrstuvwxyz";
$nodes = $xml-xpath("//line[contains(translate(text(),'$upper','$lower'),'$search')]");
再次,上述所有代码的伟大工程 - 我可以搜索内部节点的字符串,我得到了正确的比赛回来。
但是,如果一个节点是这样的: <line number="23">Shall I compare thee to a summer's day?</line>
,我寻找夏天的一天......我得到上述$nodes
线路故障。更重要的是,如果我搜索“...夏天”(不是),上面的行不匹配。获得上述线路的唯一方法是寻找“......夏天” - 其中包括夏天。
我试过stripslashes,addslashes,tohellwithslashes,htmlspecialchars但没有任何工作。此外,根据谷歌,在XPATH 1.0(我被迫使用,因为这是PHP),我将永远不能逃脱撇号。真的吗?
所以我转向这里的天才,有人必须必须处理一个XML文件,他们需要用PHP中的XPATH遍历有一个apostraphe!如果XPATH无法做到这一点,我可以在PHP中做些什么来让XPATH返回这个节点?
谢谢(再次)。你的代码中有一个小小的错字(如果你希望为别人的befefit编辑它)是'xml-xpath'应该是'xml-> xpath'(你忘了>)。此外,在我的情况下,我需要改变另一件事,以获得撇号被识别。从我上面发布的代码中,我改变了'$ search = strtolower($ keyword);'到'$ search = stripslashes(strtolower($ keyword));否则进入'夏天'实际上变成'夏天'。希望我这样做并没有弄脏别的东西!太感谢了。 – dijon 2010-07-18 16:41:06