繁体   English   中英

使用PHP脚本填写XML

[英]Using PHP script to fill in XML

我们都熟悉HTML页面中的“嵌入” PHP脚本来执行诸如显示表单结果之类的任务,但是如何以显示XML的方式完成呢?

例如,如果我写了:

<?xml version='1.0' ?>
<Response>
  <?php
        $body = $_GET['Body'];
        $fromPh = $_GET['From'];
        echo "<Msg>Your number is: $fromPh, and you typed: $body.</Msg>"
  ?>
</Response>

我收到一条消息,指出“解析错误,第1行出现意外T_STRING” 任何帮助或教程将不胜感激。

您可以将第一行更改为:

<?php echo '<?xml...'; ?>

那将解决问题,如果您愿意,也可以取消php shorttags。

您还可以执行以下操作:

<?php
$body = $_GET['Body'];
$fromPh = $_GET['From'];
echo <<<XMLCODE
<?xml version='1.0' ?>
<Response>
  <msg>Your number is: $fromPh, and you typed: $body.</Msg>
</Response>
XMLCODE;
?>

您不需要在第一个问号和xml之间xml空格:PHP看到<? 并假设您打算将它作为<?php简写。

请参阅本教程中有关嵌入PHP的几段内容:

XML处理指令是嵌入在XML文档中的命令,供某些应用程序处理。 所有XML处理指令均采用以下形式:

<?应用程序的应用程序名称信息?>

请注意,该语句使用嵌套的方括号和问号打开和关闭,并且被引用的应用程序名称必须紧随第一个问号之后,且不能有空格 该应用程序的信息可以是简短的语句,或者对于PHP,可以在页面和页面上继续。

重点是我的。

模板化XML和HTML之间没有太大区别。

<Response>
    <Msg>
        Your number is: <?php echo htmlspecialchars($_GET['From']); ?>
        and you typed: <?php echo htmlspecialchars($_GET['Body']); ?>
    </Msg>
</Response>

如果您的PHP安装被配置为允许“短标签”(即,单独使用<?而不是<?php )作为PHP代码,那么XML声明将使其失效。 这就是导致您出错的原因。

尽管您可以通过禁用短标签来解决此问题,但最好还是删除<?xml声明。 无论如何,没有理由在XML文件中包含XML声明(除非您使用的是XML 1.1,或者通常不希望避免的字符编码不是UTF-8)。

就像在HTML中一样,您需要转义<&字符(以及属性值中的引号),否则标记将被破坏。 htmlspecialchars对于XML和HTML都适用。 (您可能希望定义一个名称较短的函数来执行echo htmlspecialchars ,以减少输入。)

使用PHP的本机XML类( http://www.php.net/manual/zh/book.xmlwriter.php ),该类还将为您提供必要的数据转义等:

<?php

// Your datas from somewhere
$fromPh = '867-5309';
$body = 'The quick brown fox jumped over the <properly encoded?> dog.';

$writer = new XMLWriter();

$writer->openMemory();
$writer->setIndent(true);
$writer->setIndentString(' ');
$writer->startDocument('1.0', 'UTF-8');
$writer->startElement('Response');
$writer->writeElement('Msg', 'Your number is: '.$fromPh.', and you typed: '.$body);
$writer->endElement();
$writer->endDocument();

print $writer->outputMemory();

输出:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
 <Msg>Your number is: 867-5309, and you typed: The quick brown fox jumped over the &lt;properly encoded?&gt; dog.</Msg>
</Response>

删除<? xml <? xml因此其<?xml

function genOutput() {
$output = header("Content-type: text/xml");
$output.= "<container>\n";
$output.= "<title>".$title."</title>\n";
$output.= "<text>".$text."</text>\n";
$output.="</container>\n";
return $output;
}

echo echo应该是echo 学习基本语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM