我有一些XML模板,我正在尝试使用PHP的sprintf(v.5.3.8-Win54)填充这些模板;然而,我注意到sprintf似乎在<性格似乎<字符后面需要跟一个空格,以便sprintf正确输出我查看了PHP sprintf文档,但除了%之外,找不到任何对任何特殊字符的引用。我使用echo sprintf($format1, $name, $age);
重复了以下示例来显示问题:
$name = 'Lame';
$age = 1000;
$format1 = 'My name is %s. I am %d years old.';
$format2 = '<name> %s </name><age> %d </age>';
$format3 = 'name> %s /name>age> %d /age>';
$format4 = '<name %s </name<age %d </age';
$format5 = '<name> %s </name><age> %d </age>';
格式被回应为:
FORMAT 1: My name is Lame. I am 1000 years old.
FORMAT 2: Lame 1000
FORMAT 3: name> Lame /name>age> 1000 /age>
FORMAT 4:
FORMAT 5: <name> Lame </name><age> 1000 </age>
*FORMAT 4确实是空白的。
为什么<字符不会被输出,除非后面有空格?我想我可以在所有<使用find/replaceXML模板中的字符,但我更愿意从一开始就弄清楚为什么会发生这种情况。我有一种感觉,这将是我还没有遇到的基本知识;如果是,你能提供任何文件的参考资料吗?
有趣:我不得不在<字符,同时在Stackoverflow界面中键入此问题,使其正确显示在FORMAT 5行中!呼??!
*完整代码*
<?php
$name = 'Lame';
$age = 1000;
$format1 = 'My name is %s. I am %d years old.';
$format2 = '<name> %s </name><age> %d </age>';
$format3 = 'name> %s /name>age> %d /age>';
$format4 = '<name %s </name<age %d </age';
$format5 = '< name> %s < /name>< age> %d < /age>';
echo 'FORMAT 1: ';
echo sprintf($format1, $name, $age);
echo '<br>';
echo 'FORMAT 2: ';
echo sprintf($format2, $name, $age);
echo '<br>';
echo 'FORMAT 3: ';
echo sprintf($format3, $name, $age);
echo '<br>';
echo 'FORMAT 4: ';
echo sprintf($format4, $name, $age);
echo '<br>';
echo '<br>';
echo 'FORMAT 5: ';
echo sprintf($format5, $name, $age);
?>
您可能想要在htmlspecialchars()
中包装字符串
http://www.php.net/manual/en/function.htmlspecialchars.php
该功能将自动将html符号转换为编码的等效符号,以显示在网页上。
我想我理解这个问题;为了完全阐明我的想法:您直接在浏览器中查看sprintf()
输出的结果,而不是通过View Source模式或通过命令行,而是字面上的"显示时"。
这就解释了你的结果。让我们以格式#2为例:
<name> %s </name><age> %d </age>
如果你把这行文本保存在一个名为test.html
的文件中,然后在网络浏览器中打开,你会看到:
%s %d
这是因为浏览器将<name>
和<age>
解释为HTML标记,而不会以文本方式显示它们。
这同样适用于格式#4以及为什么它"根本不显示"。第一个<name
标记没有结束,因此浏览器假定该行中的所有文本都是属于所述标记的属性。
对于以上所有内容,如果您在所查看的页面上"查看源代码",您将看到您期望/希望看到的正确输出。
如果您的意图是实际看到输出的文本表示,例如<name>Lame</name>
,那么您可以在每个输出上使用PHP的htmlentities
或htmlspecialchars
:
echo 'FORMAT 2: ';
echo htmlentities(sprintf($format2, $name, $age));
echo '<br />';
这些函数将"将适用的字符转换为HTML"。在这种特定的情况下,<
和>
是重要的=]