首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP,如何将干净的XML文章内容放入变量中?

PHP,如何将干净的XML文章内容放入变量中?
EN

Stack Overflow用户
提问于 2009-09-15 00:48:08
回答 2查看 1.4K关注 0票数 0

我编写了一个PHP脚本,将XML发布到我的服务器上:

代码语言:javascript
复制
$xml_request='<?xml version="1.0"?><request><data></data></request>';
$url='http://www.myserver.com/xml_request.php';

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_TIMEOUT, 4); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_request); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: close'));

$result = curl_exec($ch); 

curl_close($ch);

我正在试图找出如何在服务器端解析该请求。如果我这么做:

代码语言:javascript
复制
print_r($_POST);

它返回:

代码语言:javascript
复制
Array
(
    [<?xml_version] => \"1.0\"?><request><data></data></request>
)

我希望能够将帖子传递给XML解析器之一。例如,simplexml_load_string()。我需要访问干净的XML文件。如何访问POST请求才能获得干净的文件?

EN

回答 2

Stack Overflow用户

发布于 2009-09-15 02:08:49

问题在于发布请求的脚本。在将XML字符串发送到服务器之前,需要对其进行编码,以防止服务器解析XML字符串。在将XML发布到服务器之前,尝试通过rawurlencode运行XML。

再看一看,我发现了另一个问题。看起来,CURLOPT_POSTFIELDS选项希望您自己来形成字符串。Quoth 手册页 (粗体是我的):

在HTTP " post“操作中发布的完整数据。若要发布文件,请在文件名前面加上@并使用完整路径。--它既可以作为像‘para1=val1¶2=val2¶.’这样的urlencoded字符串传递。或者是以字段名为键,字段数据为值的数组。如果值是数组,则内容类型标头将设置为多部分/表单数据。

所以在你的情况下,你会觉得

代码语言:javascript
复制
curl_setopt($ch, CURLOPT_POSTFIELDS, 'xmlstring='.rawurlencode($xml_request))

然后,在您的接收脚本中,您希望能够以$_POST‘’xmlstring‘的形式访问它。

票数 2
EN

Stack Overflow用户

发布于 2014-08-07 20:58:00

php://input 允许您在PHP.中读取原始的POST数据。

例如,

在客户端:

代码语言:javascript
复制
<?php
$ch = curl_init();
$file = file_get_contents("stuff.xml");
$url = "http://traalala.com/foobar";
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$file);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT ,3);
curl_setopt($ch,CURLOPT_TIMEOUT, 20);
$response = curl_exec($ch);
print "curl response is:" . $response;
curl_close ($ch);
?>

在服务器端的控制器中:

代码语言:javascript
复制
$post = file_get_contents("php://input");
print $post;

从柱子上开火,控制器抓取post数据。

按照stuff.xml中的定义,打印到屏幕上的XML输出是干净的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1424594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档