我希望这对某些人会有帮助
我花了一些时间来解决在查询包含引号的字符串时出现的问题。
假设您有
$parameter = "aaa \"bbb\"";
$domxpath->query("//path[text()=\"".$parameter."\""];
在 5.3.0 以上版本中,可以使用 registerPhpFunctions 在其中放置 addslashes。但在旧版本中,您无法以简单的方式做到这一点。
因此,解决方案是使用 concat 函数。因此,当您有一个内部包含 " 的子字符串时,请用 ' 将其括起来。当您有一个内部包含 ' 的子字符串时,请用 " 将其括起来。
代码如下
<?php
$dom = new DOMDocument;
$dom->loadXML("<name>'bla' \"bla\" bla</name>");
$xpath = new DOMXPath($dom);
$nodeList = $xpath->query("//name[text()=concat(\"'bla' \" ,'\"bla\"' ,\" bla\")]");
?>
下面是接收字符串并返回 XPath 查询的 concat 模式的函数。
<?php
function getPattern_MQ($pattern) {
$ar = array();
$offset = 0;
$strlen = strlen($pattern);
while (true) {
$qPos = strpos($pattern, "\"", $offset);
if (!$qPos) {
$leftOver = $offset - $strlen;
if ($leftOver < 0) {
$string = substr($pattern, $leftOver);
$ar[] = "\"" . $string . "\"";
}
break;
}
$ar[] = "\"" . substr($pattern, $offset, ($qPos - $offset)) . "\"";
$ar[] = "'" . substr($pattern, $qPos, 1) . "'";
$offset = $qPos + 1;
}
$pattern = "concat(''," . join(",", $dynamicPatternsAr) . ")";
return $pattern;
}
?>