Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 2:防止在xml响应中显示标题_Php_Xml_Symfony - Fatal编程技术网

Php Symfony 2:防止在xml响应中显示标题

Php Symfony 2:防止在xml响应中显示标题,php,xml,symfony,Php,Xml,Symfony,因此,我试图用symfony创建一个xml文档。生成过程不会出现任何问题,我会以以下方式返回带有名为sitemap.xml.twig的小树枝模板的文档: <?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> {% for slug in slugArray %} <url> <l

因此,我试图用symfony创建一个xml文档。生成过程不会出现任何问题,我会以以下方式返回带有名为
sitemap.xml.twig
的小树枝模板的文档:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    {% for slug in slugArray %}
    <url>
        <loc>{{ slug }}</loc>
        <lastmod>{{ curDate }}</lastmod>
        <changefreq>monthly</changefreq>
        <priority>0.5</priority>
    </url>
    {% endfor %}
</urlset>
$slugArray
包含大约1000个全部有效的链接,而
$curDate
包含
日期('Y-m-d',time())
的值

但是,当我尝试访问站点地图时,出现以下错误:

XML-Verarbeitungsfehler: nicht wohlgeformt
Adresse: http://localhost:8888/myWebsite/sitemap.xml
Zeile Nr. 1, Spalte 5:

HTTP/1.0 200 OK
----^
这基本上意味着xml文档的格式不好

因此,出于某种原因,在解析xml时会考虑标头,从而产生错误。xml本身是完全有效的,当我从firefox中的开发工具复制响应时,留下标题并用在线验证器检查它们,我没有得到任何错误

当我删除
$response->headers->set('Content-Type','application/xml;charset=utf-8'),我得到纯HTML


那么,我如何才能创建一个可以被浏览器解析而不会出现问题的xml响应呢?

如果您使用twig生成xml内容,那么在您的控制器中,您已经得到了一个响应。 在控制器中:

$response = $this->render('....:sitemap.xml.twig', array('urls'=>$urls));
// at this stage $xml is an HttpFoudation Response Object;
// simply set de content type
$response->headers->set('Content-Type', 'xml');
$response->setCharset('utf-8');
return $response;

您是否尝试过用不同的字符集直接在Chrome中加载响应?我记得我在使用Symfony创建API端点时遇到过类似的问题,但这毕竟只是当时浏览器的问题。您是否尝试过在响应上单独设置问题?例如
$response=newresponse()$响应->设置内容($this->render('MyBundle:Sitemap:Sitemap.xml.twig',['slugArray'=>$slugArray,'curDate'=>$curDate])$响应->设置字符集('charset=utf-8')$响应->设置状态代码(响应::HTTP_OK)$响应->标题->设置('Content-Type','application/xml')$响应->发送()@Rooneyl我知道了,但这并不影响当时的结果all@ScalatronMotoroller我试过了,但是chrome说页面是空的,即使当我检查源代码时,它也不是空的
$response = $this->render('....:sitemap.xml.twig', array('urls'=>$urls));
// at this stage $xml is an HttpFoudation Response Object;
// simply set de content type
$response->headers->set('Content-Type', 'xml');
$response->setCharset('utf-8');
return $response;