如何使用PHP将恢复的URL保存在xml文件中?

时间:2014-03-25 13:14:42

标签: php xml

我可以存储普通字符串。但是,如果我尝试存储GET方法网址,则无法存储。

function updateX_xml($id,$val,$addre){

    $xml = new DOMDocument();
    $xml->load('autoGen/autoGen.xml');
    $node = $xml->getElementsByTagName('root')->item(0) ;
    $xml_id = $xml->createElement("id");
    $xml_addres = $xml->createElement("Address");
    $domAttribute = $xml->createAttribute('type');
    $domAttribute->value = 'xs:string';
    $xml_addres->appendChild($domAttribute);
    $xml_url = $xml->createElement("url");
    $xml_id->nodeValue=$id;
    $xml_url->nodeValue=$val;
    $xml_addres->nodeValue=$addre;
    $node->appendChild( $xml_id );
    $node->appendChild( $xml_url );
    $xml->formatOutput = true;
    $xml->save("autoGen/autoGen.xml");
}

如果我像这样updateX_xml(1,'getdata?event_id=1 &lan=en',"addaress");调用此函数,则它无效。

这将生成此警告。 警告:updateX_xml():第25行的C:\ xampp \ htdocs \ test_file_read \ gen_url.php中未终止的实体引用lan = en

3 个答案:

答案 0 :(得分:0)

尝试参数之间没有空格:

updateX_xml(1,'getdata?event_id=1&lan=en',"addaress");

另外,正如其他人所提到的,你需要逃避"&",因为它是xml中使用htmlspecialchars()的特殊字符:

 $xml_url->nodeValue = htmlspecialchars($val);

答案 1 :(得分:0)

您必须转义HTML实体字符:

$val= htmlentities($str, ENT_XML1);
    $xml_url->nodeValue=$val;

答案 2 :(得分:0)

如果要在XML / HTML中插入内容,则应始终使用htmlspecialchars函数。这将使您的字符串转换为正确的XML语法。

所以:

function updateX_xml($id,$val,$addre)
{
    $xml = new DOMDocument();
    $xml->load('autoGen/autoGen.xml');
    $node = $xml->getElementsByTagName('root')->item(0) ;
    $xml_id = $xml->createElement("id");
    $xml_addres = $xml->createElement("Address");
    $domAttribute = $xml->createAttribute('type');
    $domAttribute->value = 'xs:string';
    $xml_addres->appendChild($domAttribute);
    $xml_url = $xml->createElement("url");
    $xml_id->nodeValue=$id;
    $xml_url->nodeValue = htmlspecialchars($val);
    $xml_addres->nodeValue=$addre;
    $node->appendChild( $xml_id );
    $node->appendChild( $xml_url );
    $xml->formatOutput = true;
    $xml->save("autoGen/autoGen.xml");
}