XPATH将字符串与特殊字符进行比较

时间:2014-01-28 22:49:00

标签: php xpath special-characters

我正在尝试使用xpath比较元素的内容。 示例代码:

div[@ class = "name" and. = "'.$ data.'"] 

不幸的是,有时$ data包含& quotes或其他特殊字符。

示例:

My school is a "super" 

在这种情况下,我无法比较内容。我该怎么办?

4 个答案:

答案 0 :(得分:1)

其他答案(最多可以知道)都会逃避太多的字符(例如,addslashes($string)也会转义双引号)。

无论如何,PHP仅支持XPath 1.0,它遭受错误的转义功能。从XPath 2.0开始,可以通过加倍来转义用于声明字符串的引号(例如,'foo''bar'将返回foo'bar)。在XPath 1.0中,没有办法这样做。


摆脱这种情况的一种方法是使用

忽略输入和搜索值中的单引号
$string = str_replace("'", "", $data);
$xpath = "div[@class = 'name' and translate(., \"'\", '') = '$string']";

str_replace行会从搜索令牌中删除所有单引号,并且XPath中的translate调用会从字符串中删除所有单引号以进行比较。

答案 1 :(得分:0)

你可以使用htmlentitieshtml_entity_decod e,它更适合你的方式,我不明白你是否有特殊字符,或者他们在数据中。

检查php文档。

答案 2 :(得分:0)

PHP有一个名为" addSlashes"的函数。解决这个问题。它的用途:

    addSlashes(your_php_variable);

答案 3 :(得分:0)

名为addslashes()的函数会转义引号等特殊字符。

试试这个:

div[@ class = "name" and. = "'.<?php echo addslashes($data) ?>.'"]