将 XML 节点值转换为 PHP/HTML 字符串

transform XML nodeValue to PHP/HTML string

我正在使用 AJAX 实时搜索来生成特定于用户配置文件的 link。它运行良好,我总是以我想要的配置文件结束,但有一个问题。

让我们为用户 1(用户名 = testuser;user_id = 1;blogname = testblog)执行此操作。如果我搜索 "test",两个 link 都会显示,link 到 testuser 的个人资料,link 到 testuser 的博客。现在奇怪的是,links 看起来像这样:

profile.php?user=1&page=profile

profile.php?user=1&page=blog

但实际的 link 看起来像这样:

profile.php?user=%20+%201%20+%20&page=profile

profile.php?user=%20+%201%20+%20&page=blog

因为我最终到达了我想要的页面,你可以说这无关紧要,但它确实如此,因为我需要 $GET_['user'] 值始终是实数,而不是我正在处理的那种事情,在这里。

我希望有一些简单的方法可以解决这个问题。像 nodeValue->string 之类的。我需要更改我认为这部分代码中的节点值:$z->item(0)->childNodes->item(0)->nodeValue

这是我正在使用的代码:

<?php
$xmlDoc=new DOMDocument();
$xmlDoc->load("../xml/accounts.xml");

$x=$xmlDoc->getElementsByTagName('account');

//get the q parameter from URL
$q=$_GET["q"];

//lookup all links from the xml file if length of q>0
if (strlen($q)>0) {

    $hint="";

    for($i=0; $i<($x->length); $i++) {
        $y=$x->item($i)->getElementsByTagName('username');
        $b=$x->item($i)->getElementsByTagName('blogname');
        $c=$x->item($i)->getElementsByTagName('companyname');
        $z=$x->item($i)->getElementsByTagName('user_id');



        //search for usernames
        if ($y->item(0)->nodeType==1) {

            //find a link matching the search text
            if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q)) {

                if ($hint=="") {
                    $hint=  "<a href='profile.php?user= + " . 
                        $z->item(0)->childNodes->item(0)->nodeValue .
                        " + &page=profile' >" .
                        $y->item(0)->childNodes->item(0)->nodeValue . "</a><span> (profile)</span>";

                } else {
                    $hint=  $hint . "<br /><a href='profile.php?user= + " .
                        $z->item(0)->childNodes->item(0)->nodeValue .
                        " + &page=profile' >" .
                        $y->item(0)->childNodes->item(0)->nodeValue . "</a><span> (profile)</span>";
                }
            }
        }




    //search for blognames
        if ($b->item(0)->nodeType==1) {

            //find a link matching the search text
            if (stristr($b->item(0)->childNodes->item(0)->nodeValue,$q)) {

                if ($hint=="") {
                    $hint=  "<a href='profile.php?user= + " . 
                        $z->item(0)->childNodes->item(0)->nodeValue .
                        " + &page=blog' >" .
                        $b->item(0)->childNodes->item(0)->nodeValue . "</a><span> (blog)</span>";

                } else {
                    $hint=  $hint . "<br /><a href='profile.php?user= + " .
                        $z->item(0)->childNodes->item(0)->nodeValue .
                        " + &page=blog' >" .
                        $b->item(0)->childNodes->item(0)->nodeValue . "</a><span> (blog)</span>";
                }
            }
        }


// Set output to "no suggestion" if no hint was found
// or to the correct values
if ($hint=="") {
    $response="no QuickResults, hit enter";
} else {
    $response=$hint;
}


//output the response
echo $response;
?>

在我的 XML 文件中 结构如下所示,如果有帮助:

<account>
    <username>testuser</username>
    <user_id>1</user_id>
    <blogname>testblog</blogname>
</account>

您遇到的问题是因为您的代码向生成的 link 添加了空格和加号。空格自动编码为 %20。解决方案是像这样从代码中删除它们:

$hint=  "<a href='profile.php?user=" . 
         $z->item(0)->childNodes->item(0)->nodeValue .
         "&page=profile' >" .
         $y->item(0)->childNodes->item(0)->nodeValue . "</a><span> (profile)</span>";

所有四次都需要进行此更改。