2

私は次のようなものを置き換えようとしています:

$text = "Hello <--name--> !!";
echo str_replace("--","?",$text);

期待される:

Hello <?name?> !!

結果:

Hello !!

(ソースコードをチェックしていて、短いオープンタグを有効にしています)

私は多くの方法を試しましたが、結果として文字列<?(または)を取得することはできないようです。<?phpUbuntuでデフォルトで有効になっているSuhosinパッチに関連しているのではないかと思います。他のことをする前に、誰かがそれを機能させる方法を知っていますか?

ありがとうございました。

アップデート:

コマンドラインで直接試してみましたが、うまくいきました。ええ、問題は、phpタグの間にあるものがブラウザ(Chrome)に表示されず、ソースコードにも表示されないことでした。

echo "A <"."?"."php"." echo 1 "." ?".">"." B";

Chromeでは、ソースコードを見ると「AB」と表示されます。しかし、Firefoxはそれを完全に表示します...要約すると、Chromeは私をだましていました;)

ありがとうございました!!!

申し訳ありませんが、私は最良の答えを選ばなければなりませんでした...しかし私にとっては3つの答えが正しかったです。

4

4 に答える 4

2

ブラウザのソースビューを実際に調べましたか?<? ?>セクションはタグとして解釈される傾向があります。

どこも使用していない場合eval()、これらのタグが実際にPHPによって解釈される方法はありません。

たぶんSuhosinはそれらを除外しますが、それは私を驚かせるでしょう。あなたはそれを使用することによってそれを回避することができるかもしれません

&lt; &gt;

代わりは。

于 2010-06-19T08:25:49.577 に答える
1

私はPekkaとMike(私ではなく他のMike)に同意します-正しく表示されるので、HTMLソースコードを確認する必要があります。出力に小なり記号と大なり記号を本当に表示したい場合は、それらをHTMLエンティティに置き換える必要があります(Pekkaによって提案されているように)。

$search = array('<', '>', '--');
$replace = array('&lt;', '&gt;', '?');
$text = 'Hello <--name--> !!';
echo str_replace($search,$replace,$text);
于 2010-06-19T08:36:54.343 に答える
1

それはスホシンとは何の関係もありません。

<?name?> !!HTMLページに表示すると、次のようになります。!!

ページソースを確認してください。

于 2010-06-19T08:29:12.550 に答える
0

次のようにhtmlspecialcharsを使用することもできます。

$text = htmlspecialchars("Hello <--name--> !!");
echo str_replace("--","?",$text); // Hello &lt;?name?&gt; !!

htmlspecialcharsは次のものを置き換えます:

  • &with&amp;
  • "と&quot;
  • <with&lt;
  • &gt;

何らかの理由で「」を置き換えたくない場合は、それが可能です(http://se2.php.net/manual/en/function.htmlspecialchars.phpを参照)。私が知っているように、常に。に置き換えられ&amp;、 htmlspecialchars&lt;&gt;使用する場合。

于 2010-09-22T21:34:19.013 に答える