我有一些XML模板,我试图使用PHP的sprintf(v.5.3.8-Win54)来填充;但是,我注意到sprintf似乎遇到了< 字符的问题。 似乎 < 字符后面需要一个空格,以便sprintf能够输出正确。我看了PHP sprintf documentation但除了%之外我找不到任何特殊字符的引用。我使用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>
*格式4确实是空白。
为什么 &lt; 字符不会被输出,除非它后面有空格?我想我可以使用find / replace为XML模板中的所有 &lt; 字符添加一个空格,但我宁愿找出为什么会发生这种情况。我有一种感觉,这将是我尚未遇到的基本知识;如果是的话,你能提供任何文件的参考吗?
有趣: 我必须在 &lt; 字符后添加空格,同时输入此问题Stackoverflow接口,以便它在FORMAT 5行中正确显示! Huuuuuuh ??!
*完整代码*
<?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);
?>
答案 0 :(得分:1)
您可能希望在htmlspecialchars()
http://www.php.net/manual/en/function.htmlspecialchars.php
该功能会自动将您的html符号转换为编码的等价物,以显示在网页上。
答案 1 :(得分:0)
我想我理解这个问题;完全澄清我的想法:你直接在浏览器中查看sprintf()
输出的结果 - 而不是通过命令行查看源模式或,但实际上是“因为它显示”。
这解释了您的结果。我们以格式#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”。在这种特定情况下,<
和>
是重要的=]