Php Symfony 2:防止在xml响应中显示标题
因此,我试图用symfony创建一个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
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;