2010-06-19 97 views
2

我試圖取代的東西,如:PHP str_replace函數/ preg_replace函數問題PHP開放標籤

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

預計:

Hello <?name?> !! 

結果:

Hello !! 

(我檢查源代碼,並且啓用了短打開標籤)

我已經嘗試了很多方法,但似乎我不會有任何<?(或<?php)字符串。 我認爲它可能與Ubuntu中默認啓用的Suhosin補丁有關。在做別的事之前,有人知道如何讓它工作嗎?

謝謝。

更新:

我直接在命令行嘗試,它的工作。是的,問題在於php標籤之間的任何內容都不會在瀏覽器(Chrome)中顯示,甚至不會在源代碼中顯示。

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

在查看源代碼時,Chrome顯示「A B」。但Firefox顯示它完成...所以總結鉻欺騙我;)

謝謝!!!

對不起,我不得不選擇最佳答案......但對我來說,3答案是正確的。

+0

發佈和更新。 – lepe 2010-06-20 00:20:39

回答

2

你真的看看瀏覽器的源代碼視圖嗎? <? ?>部分往往被解釋爲標籤。

如果你沒有在任何地方使用eval(),這些標籤將不會被PHP實際解釋。

也許Suhosin濾除了那些,但那會讓我感到驚訝。您可以通過使用

&lt; &gt; 

來代替。

+0

比我的回答更好。至少你給了HTML實體來替換。該死的打字慢。 – Mike 2010-06-19 08:34:06

1

與Suhosin沒有任何關係。

<?name?> !!!!

檢查網頁的源文件顯示在一個HTML頁面的結果。

1

我同意Pekka和Mike(其他Mike,不是我Mike) - 您確實需要檢查HTML源代碼,因爲它會正確顯示。如果你真的想看到的小於和大於輸出符號,您需要更換那些HTML實體(由佩卡的建議):

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

你也可以使用用htmlspecialchars,就像這樣:

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

用htmlspecialchars將取代:

  • &與&放大器;
  • 「與& QUOT;
  • <與& LT;
  • 與& GT;

如果您不想替換」 出於某種原因或其他它可能的(見http://se2.php.net/manual/en/function.htmlspecialchars.php)。 &,<和>,儘管如此,據我所知,當您使用htmlspecialchars時,總是用&amp;&lt;&gt;替代。