Использование PHP-скрипта для заполнения XML - PullRequest
0 голосов
/ 08 апреля 2010

мы все знакомы с «встраиванием» PHP-скриптов в HTML-страницы для выполнения таких задач, как отображение результатов формы, но как это можно сделать способом, отображающим 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>

Я получаю сообщение, в котором говорится "ошибка разбора, неожиданная T_STRING в строке 1" . Любая помощь или учебники будут оценены.

Ответы [ 7 ]

2 голосов
/ 08 апреля 2010

Вы можете изменить первую строку на:

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

, которая решит проблему, вы также можете отключить шорттеги php, если хотите

Вы также можете сделать следующее:

<?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;
?>
1 голос
/ 08 апреля 2010

Используйте собственные классы PHP PHP (http://www.php.net/manual/en/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>
1 голос
/ 08 апреля 2010

Между шаблонами 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, чтобы сократить ввод.)

1 голос
/ 08 апреля 2010

Вам не нужно ставить пробел между первым знаком вопроса и xml: PHP видит <? и предполагает, что вы предполагали, что это будет сокращение для <?php.

См. Несколько абзацев в этого руководства по внедрению PHP :

Директива обработки XML - это команда, встроенная в документ XML для обработки некоторым приложением. Все директивы обработки XML имеют вид:

<? Appname информация для приложения?>

Обратите внимание, что оператор открывается и закрывается вложенными скобками и вопросительными знаками и что имя приложения, на которое ссылаются, должно идти сразу после первого вопросительного знака, без пробела перед ним . Информация для приложения может быть кратким изложением или, в случае PHP, может распространяться на страницы и страницы.

Акцент был мой.

0 голосов
/ 08 апреля 2010

echo echo должно быть echo. Изучите основной синтаксис.

0 голосов
/ 08 апреля 2010
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;
}
0 голосов
/ 08 апреля 2010

убрать пробел между <? xml, чтобы его <?xml

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...