Pregunta

Estoy tratando de reemplazar algo como:

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

Esperado:

Hello <?name?> !!

Resultado:

Hello !!

(Estoy revisando el código fuente y tengo etiquetas abiertas cortas habilitadas)

He intentado muchas maneras, pero parece que nunca puedo tener como resultado ningún resultado <? (o <?php) cuerda. Creo que puede estar relacionado con el parche Suhosin que está habilitado de forma predeterminada en Ubuntu. Antes de hacer algo más, ¿alguien sabe cómo hacer que eso funcione?

Gracias.

ACTUALIZAR:

Intenté directamente en la línea de comandos y funcionó. Sí, el problema era que cualquier cosa entre las etiquetas PHP no se muestra en el navegador (Chrome), ni siquiera en el código fuente.

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

En Chrome muestra "AB" al mirar el código fuente. Pero Firefox lo muestra completo ... así que en resumen, Chrome me estaba engañando;)

¡¡¡Gracias!!!

Lo siento, tuve que elegir la mejor respuesta ... pero para mí la respuesta 3 fueron correctas.

¿Fue útil?

Solución

¿Realmente miraste la vista fuente del navegador? <? ?> Las secciones tienden a ser interpretadas como etiquetas.

Si no estás usando eval() En cualquier lugar, no hay forma de que estas etiquetas sean interpretadas por PHP.

Tal vez Suhosin los filtra, pero eso me sorprendería. Es posible que pueda evitarlo usando

&lt; &gt;

en cambio.

Otros consejos

No tiene nada que ver con Suhosin.

<?name?> !! Cuando se muestra en una página HTML da como resultado !!

Consulte la fuente de la página.

Estoy de acuerdo con Pekka y Mike (el otro Mike, no yo Mike). Realmente necesita verificar el código fuente HTML, como se mostrará correctamente. Si realmente desea ver los símbolos menos que más grandes y más grandes en la salida, debe reemplazar aquellos con entidades HTML (como lo sugiere Pekka):

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

También puede usar htmlspecialchars, como este:

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

htmlspecialchars reemplazará:

  • & con &
  • " con "
  • <con <
  • con>

Si no desea reemplazar "por alguna razón u otra es posible (ver http://se2.php.net/manual/en/function.htmlspecialchars.php). &, <y>, sin embargo, es lo más lejos que yo sé siempre reemplazado con &amp;, &lt; y &gt; Cuando usa htmlspecialchars.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top