我希望這對某些人會有幫助
當您查詢包含引號的字串時,我花了一些時間來解決這個問題。
假設您有
$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;
}
?>