PHP の sprintf (v.5.3.8-Win54) を使用して入力しようとしている XML テンプレートがいくつかあります。ただし、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 は確かに空白になります。
<文字の後にスペースがない限り出力されない理由はありますか? 検索/置換を使用して、XML テンプレート内のすべての<文字にスペースを追加するだけでよいと思いますが、そもそもなぜこれが起こっているのかを突き止めます。これは、まだ出会っていない基本的な知識になると思います。もしそうなら、ドキュメントへの参照を提供してもらえますか?
興味深い: FORMAT 5 行に正しく表示されるように、Stackoverflow インターフェイスでこの質問を入力するときに、 <文字の後にスペースを追加する必要がはぁぁぁぁぁぁぁぁぁぁぁぁん??!
*完全なコード*
<?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);
?>