Domanda

Sto cercando di sostituire qualcosa di simile:

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

Previsto:

Hello <?name?> !!

Risultato:

Hello !!

(Sto controllando il codice sorgente e ho abilitato tag brevi aperti)

Ho provato così tanti modi, ma sembra che non posso mai avere come risultato nessuno <? (o <?php) corda. Penso che possa essere correlato alla patch Suhosin abilitata per impostazione predefinita in Ubuntu. Prima di fare qualcos'altro, qualcuno sa come farlo funzionare?

Grazie.

AGGIORNARE:

Ho provato direttamente nella riga di comando e ha funzionato. Sì, il problema era che qualsiasi cosa tra i tag PHP non fosse visualizzata nel browser (Chrome), nemmeno nel codice sorgente.

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

In Chrome visualizza "AB" quando si guarda il codice sorgente. Ma Firefox lo mostra completo ... quindi in sintesi Chrome mi stava ingannando;)

Grazie!!!

Scusa, ho dovuto scegliere la risposta migliore ... ma per me la risposta 3 era corretta.

È stato utile?

Soluzione

Hai davvero esaminato la vista sorgente del browser? <? ?> Le sezioni tendono ad essere interpretate come tag.

Se non stai usando eval() Ovunque, non c'è modo in cui questi tag saranno effettivamente interpretati da PHP.

Forse Suhosin filtra quelli fuori, ma questo mi sorprenderebbe. Potresti essere in grado di aggirarlo usando

&lt; &gt;

invece.

Altri suggerimenti

Non ha niente a che fare con Suhosin.

<?name?> !! Quando viene visualizzato in una pagina HTML, risulta !!

Controlla la fonte di pagina.

Sono d'accordo con Pekka e Mike (l'altro Mike, non io Mike) - devi davvero controllare il codice sorgente HTML, come mostrerà correttamente. Se vuoi davvero vedere i simboli tutt'altro che più grandi nell'output, devi sostituire quelli con entità HTML (come suggerito da Pekka):

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

Potresti anche usare HTMLSpecialChars, come questo:

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

HTMLSpecialChars sostituirà:

  • & insieme a &
  • " insieme a "
  • <con <
  • con>

Se non vuoi sostituire "per un motivo o l'altro è possibile (vedi http://se2.php.net/manual/en/function.htmlspecialchars.php). &, <and>, tuttavia, è per quanto ne so sempre sostituito &amp;, &lt; e &gt; Quando si utilizzano HTMLSpecialChars.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top