質問

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

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

期待される:

Hello <?name?> !!

結果:

Hello !!

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

私は非常に多くの方法を試しましたが、結果として得られないことはできないようです <? (また <?php) ストリング。 Ubuntuでデフォルトで有効になっているスホシンパッチに関連している可能性があると思います。他に何かをする前に、誰かがそれを機能させる方法を知っていますか?

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

アップデート:

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

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

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

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

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

役に立ちましたか?

解決

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

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

たぶん、スホシンはそれらをフィルタリングしますが、それは私を驚かせるでしょう。あなたはそれを使ってそれを回避できるかもしれません

&lt; &gt;

代わりは。

他のヒント

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

<?name?> !! HTMLページに表示されると、結果が表示されます !!

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

私はPekkaとMike(他のMike、Me MikeではなくMike)に同意します。正しく表示されるため、HTMLソースコードを本当に確認する必要があります。出力内のシンボルよりも大きいシンボルを本当に見たい場合は、それらをHTMLエンティティに置き換える必要があります(Pekkaが示唆しているように):

$search = array('<', '>', '--');
$replace = array('&lt;', '&gt;', '?');
$text = 'Hello <--name--> !!';
echo str_replace($search,$replace,$text);

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

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

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

  • & と &
  • " と "
  • <で<
  • >

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top