【问题标题】:Curl and htmlentities stripping XML tagsCurl 和 htmlentities 剥离 XML 标签
【发布时间】:2012-05-27 02:26:20
【问题描述】:

所以我正在编写一个 php 脚本,该脚本使用 Curl 和 POST 方法将信息传递给服务器,然后以 XML 的形式从该服务器取回信息。然后我想获取这些信息并将其解析为用户可读的格式。

我使用 curl 获取信息并将其加载到变量 ($result) 中,然后我想将其加载到 simpleXML 中并存储在变量 $routeinfo 中。但是,当我执行 var_dump($routeinfo) 时,似乎没有存储任何数据。我通过回显它确认 $result 中存在数据。

我还认为这可能是由于当我回显 $result 时 XML 没有显示在浏览器中(但如果我检查源代码,它就在那里)。只是为了检查我是否使用了 htmlentities 但这会导致很多错误,因为

<?php 
//retrieve form data in a variable
$input = $_POST['stopNo'] ;

//declare other variables needed
$api_key = 'xxxkey' ;
$api_id = 12345 ;
$url = 'url to send data to' ; 
$querystring = "appID=". $api_id . "&apiKey=" . $api_key . "&stopNo" . $input ;
$data = urlencode($url) ; 


//curl using

$ch = curl_init() ; 

//set up curl

curl_setopt($ch, CURLOPT_URL, 'urlsendingdatato');
curl_setopt($ch, CURLOPT_POSTFIELDS, 'appID='.urlencode($api_id).'&apiKey=' .urlencode($api_key) . '&stopNo=' .urlencode($input) );
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0 ) ; 
curl_setopt($ch, CURLOPT_ENCODING, "UTF-8") ;
curl_setopt($ch, CURLOPT_BINARYTRANSFER , TRUE) ;


//execute and gather info
$result = curl_exec($ch) ; 

//close connection
curl_close($ch) ;

//format data 
//ent at the moment serves no purpose doesn't render the information correctly
$ent = htmlentities($result);
$routeinfo = new SimpleXMLElement($result) ;

//print data
echo "<br> $result <br>" ; 
var_dump($routeinfo) ;


?> 

【问题讨论】:

  • 我现在尝试的另一件事是再次将数据直接从 Curl(so $result) 加载到 simplexml_load_string($result) 但是当我对其执行 dump_var 或 print_r 时,它只会显示一个空数组.然而,回显 $result 本身表明存在数据。

标签: php xml curl xampp


【解决方案1】:

似乎是在创建 simpleXML 对象时出现了问题。 因此,您可以尝试使用定义良好的 XML 文件创建新的 simpleXMLElement 对象。如果可行,则表示获取的 xml 文件格式不正确。

$xml="<?xml version='1.0'?><book><author>steve</author><price>200</price><name>Its my life</name></book>";
$test= new SimpleXMLElement($xml);
var_dump($test);

这对我有用!

但通常如果存在 xml 解析问题,simpleXMLElement 会抛出 error 。它是否在您的情况下返回任何错误?或者您可能已关闭错误报告 (error_reporting(0); )。

【讨论】:

  • 可爱,这对让我意识到这不是我的代码非常有帮助......有点。 XML 也在 SOAP 请求等中发送它。所以我必须使用命名空间来清理本文中提到的 XML stackoverflow.com/q/740730/1405575
  • 太好了...如果还有其他问题请告诉我:)
猜你喜欢
  • 1970-01-01
  • 2014-03-16
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-21
相关资源
最近更新 更多