0

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);

?>
4

2 に答える 2

1

おそらく、文字列をラップしたいでしょうhtmlspecialchars()

http://www.php.net/manual/en/function.htmlspecialchars.php

この関数は、HTML シンボルを Web ページに表示されるエンコードされた同等のものに自動的に変換します。

于 2013-08-05T19:40:31.520 に答える