2010-04-08 50 views
0

我們都熟悉將PHP腳本「嵌入」HTML頁面以完成顯示錶單結果等任務,但是怎樣才能以顯示XML使用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」。任何幫助或教程將不勝感激。

回答

1

有模板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中一樣,你需要轉義<&字符(和引號,屬性值),否則你的標記會被破壞。對於XML而言,htmlspecialchars的作用與HTML一樣。 (您可能希望定義一個函數與較短的名稱做echo htmlspecialchars,以減少輸入。)

+0

總是有嚴格標準和寬鬆標準解釋的爭論,但W3C建議的第2.8節說:'XML文檔應該以一個XML聲明開始,它指定了正在使用的XML版本'。應該並不意味着必須,但我不建議省略它,僅僅是因爲第一次嘗試包含它沒有奏效。 – 2010-04-08 17:54:16

+0

我正在嘗試禁用.HTACCESS中的短標籤 - 感謝您的貢獻。 – Yaaqov 2010-04-08 18:45:29

+0

我喜歡這個解決方案,因爲它是最簡化的,並闡明瞭Short Tage問題。再次感謝Bobince。 – Yaaqov 2010-04-08 19:19:26

1

您需要在第一個問號和xml之間沒有空格:PHP會看到<?,並假定您打算將其作爲<?php的簡寫。

見幾段下來this tutorial on embedding PHP

的XML處理指令是嵌入在XML文檔中的某些應用程序處理的命令。該語句打開和嵌套的括號和問號關閉

< APPNAME信息應用>

通知,而該的應用程序的名稱被引用必須:所有的XML處理指令採取的形式?在第一個問號後面出現,之前沒有空格。應用程序的信息可以是一個簡短的聲明,或者在PHP的情況下,可以繼續進行頁面和頁面。

強調是我的。

+0

該死的打我吧:P – studioromeo 2010-04-08 16:33:34

+0

如果PHP變量short_open_tag的值爲是這並沒有解決問題,因爲該鏈接進一步描述您的報價如下,在標題爲「短標籤「。 – 2010-04-08 17:46:57

+0

好的,修復了代碼 - 仍然在尋找一個解決方案雖然(同樣的錯誤) – Yaaqov 2010-04-08 17:56:53

0

刪除<? xml之間的空間,因此其<?xml

0
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

我是PHP的新手 - 當代碼運行時,如何顯示此函數的輸出? – Yaaqov 2010-04-08 16:36:05

0

echo echo應該echo。瞭解基本語法。

2

你可以改變的第一行:

<?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; 
?> 
+0

非常感謝,我會對它進行測試。 – Yaaqov 2010-04-08 17:58:42

1

使用PHP的原生XML類(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> 
+0

謝謝你的詳細解決方案 - 非常感謝。 – Yaaqov 2010-04-08 18:49:29