【问题标题】:Generating XML which contains HTML in PHP - Problems with variables [closed]在 PHP 中生成包含 HTML 的 XML - 变量问题 [关闭]
【发布时间】:2013-06-17 08:37:48
【问题描述】:

我在这里遇到了一个小问题:

我有一个生成 xml 数据的 php 文件。

$requestXmlBody .= "<Version>$compatabilityLevel</Version>";

现在从上面的 php 代码中提取了变量,并且生成了 HTML

$requestXmlBody .= 
    '<Description>
        <![CDATA[
            <!DOCTYPE html>
            <html>
                <head>
                </head>
                <body>
                    <script type="text/javascript">
                        <!--some JS-->
                    </script>
                    <img src="http://www.myserver.com/pic.jpg" class="etalage_thumb_image" />
                </body>
            </html>
        ]]>
    </Description>';

现在奇怪的是我不能混合变量和 HTML 代码。 如您所见,我将 CDATA 用于 HTML。我想为图像名称使用变量而不是固定链接。所以代码看起来像这样

$requestXmlBody .= '<Description>
    <![CDATA[
        <!DOCTYPE html>
        <html>
            <head>
            </head>
            <body>
                <script type="text/javascript">
                    <!--some JS-->
                </script>
                <img src="$imagelink" class="etalage_thumb_image" />
            </body>
        </html>
    ]]>
</Description>';

但这只是行不通。我试过这个

$requestXmlBody .= '<Description>
    <![CDATA[
        <!DOCTYPE html>
        <html>
            <head>
            </head>
            <body>
                <script type="text/javascript">
                    <!--some JS-->
                </script>
                <img src="]]>$imagelink<![CDATA[" class="etalage_thumb_image" />
            </body>
        </html>
]]>
</Description>';

但这也行不通。我什至尝试将 php 变量(我从会话 btw 中获取)移交给 JS 变量并将其包含在 document.write 中

还是没有成功。

这个可以用

$requestXmlBody .= '<Description>
    $imagelink
</Description>';

但不能和上面看到的生成的 HTML 代码一起使用。

感谢任何帮助。

谢谢

【问题讨论】:

  • 您的字符串似乎在' ... ' 对(单引号)之间,在这些字符串中,php 不会像带有"(双引号)的字符串那样插入变量。这可能与您的问题有关吗?

标签: php html xml


【解决方案1】:

单独的关注点。不要一次做几件事。如果您将嵌入的 HTML 拆分为自己的变量,它会变得容易得多。

一旦您从 XML 上下文中“释放”了 HTML 字符串,您就会发现问题仍然存在。它是由用单引号引用字符串引起的,这会阻止插值。您必须使用字符串连接而不是直接嵌入变量。

$description = '<!DOCTYPE html>
    <html>
        <head>
        </head>
        <body>
            <script type="text/javascript">
                <!--some JS-->
            </script>
            <img src="' . $imagelink . '" class="etalage_thumb_image" />
        </body>
    </html>';

$requestXmlBody .= '<Description>
    <![CDATA[' . $description . ']]>
</Description>';

确保您的 HTML 字符串本身不包含 CDATA 部分,因为 CDATA 部分不能嵌套。

【讨论】:

  • 非常聪明的主意!这对我有用:) 谢谢
【解决方案2】:

最好的方法是使用writeCData 方法。

$link= 'link goes here';
$imagelink = '<img src="'.$link.'" /> ';

// serve xml doc as xml
header('Content-type: application/xml');

// set up the document
$xml = new XmlWriter();
$xml->openMemory();
$xml->startDocument('1.0', 'UTF-8');
$xml->startElement('description');

// CData output
$xml->writeCData($imagelink);
$xml->endElement();

// end the document and output
$xml->endElement();
echo $xml->outputMemory(true);

【讨论】:

    猜你喜欢
    • 2016-05-17
    • 2014-08-27
    • 1970-01-01
    • 2011-01-14
    • 2011-09-20
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    相关资源
    最近更新 更多