2010-08-18 13 views
10

tengo una URL en html:tema de codificación, coverting & a & para HTML usando PHP

<a href="index.php?q=event&amp;id=56&amp;date=128"> 

necesito para convertirlo en una cadena exactamente como:

<a href="index.php?q=event&id=56&date=128"> 

sé cómo hacer esto con preg_replace, etc., pero ¿hay alguna función en php que trate directamente con la codificación que pueda usar para otros problemas de codificación como & nsbp (o lo que sea, etc.)? Idealmente, enviaría mi cadena a la función y produciría '&' en lugar de & amp. ¿Existe una función universal para convertir &TEXT; en un personaje real?

Editar: lo siento, publicado esto antes de terminar de escribir la pregunta. PREGUNTA ahora está completa.

Respuesta

17

uso html_entity_decode():

$newUrl = html_entity_decode('<a href="index.php?q=event&amp;id=56&amp;date=128">'); 
echo $newUrl; // prints <a href="index.php?q=event&id=56&date=128"> 
+0

Sea consciente de 'htmL_entity_decode' y' ' . Puede reemplazarlo con '$ txt = str_replace (" \ xA0 ", '', $ txt);'. – testing

4

Uso htmlspecialchars_decode. Ejemplo directamente desde la página de documentación de PHP:

$str = '<p>this -&gt; &quot;</p>'; 
echo htmlspecialchars_decode($str); // <p>this -> "</p> 
+1

html_entity_decode - Convierta todos los caracteres aplicables, htmlspecialchars_decode - Convierta caracteres especiales ... (desde php.net) –

1

No hay construida en función de PHP que se llevará a una entidad como &amp; y convertirlo en un doble &. Por si acaso hay alguna confusión, la entidad HTML para & es en realidad &amp;, no amp;, por lo que ejecuten cualquier construido en analizador en su ejemplo devolverá el siguiente:

<a href="index.php?q=event&id=56&date=128"> 

y no

<a href="index.php?q=event&&id=56&&date=128"> 

Para obtener la versión doble &, deberá usar una expresión regular.

Alternativamente, si de hecho desea la versión simple &, tiene dos posibilidades.

  1. Si simplemente desea convertir &amp; &quot; &#039; &lt; &gt;, entonces debe usar htmlspecialchars_decode. Esto sería suficiente para el ejemplo que das.
  2. Si desea convertir cualquier cadena del formato &TEXT;, entonces debe usar html-entity-decode.

Sospecho que htmlspecialchars_decode será más rápido que html_entity_decode por lo que si cubre todas las entidades que desea convertir, debe usar eso.

+0

+1 - gracias por los puntos de seguimiento sobre las diferencias entre las dos opciones. – JMC

0

después de pasar por la cadena TinyMCE solamente este código ayuda me

$string = iconv('UTF-8','cp1251',$string); 
$string = str_replace(chr(160), chr(32), $string); 
$string = iconv('cp1251','UTF-8',$string); 
Cuestiones relacionadas