Cómo eliminar el #038; al reemplazar cadenas en el contenido

30 oct 2011, 21:16:29
Vistas: 13.8K
Votos: 3

Estoy intentando añadir algunos reemplazos de cadenas a the_title() -

function format_title($content) {
    $content = str_replace('&','&<br>', $content);  // Reemplazar & con salto de línea
    $content = str_replace('!','!<br>', $content);  // Reemplazar ! con salto de línea
    return $content;
}
add_filter('the_title','format_title',11);

Cuando intento reemplazar los símbolos de "y" (&) obtengo un "#038;" adicional después del reemplazo (código ASCII para &), no estoy seguro de por qué ocurre esto (¿razón de seguridad?) o cómo crear una solución alternativa. He intentado reemplazar "&" con "& amp ;" pero sin efecto.

El objetivo es añadir saltos de línea en ciertos puntos de un título para crear un mejor flujo en la tipografía. Tanto la base de datos como el sitio tienen codificación UTF8.

0
Todas las respuestas a la pregunta 3
0

&#38; es esencialmente sinónimo de &amp;. En el filtro the_title, wptexturize() se ejecuta con prioridad 1 (¡importante!) y realiza este reemplazo.

Así que para cuando llega a tu función format_title() con prioridad 11, en lugar de reemplazar el símbolo & solitario, estás reemplazando (y rompiendo) la entidad de carácter &#38;.

Por lo tanto, puedes:

  1. mover tu función a prioridad 0 para que se ejecute antes de texturize
  2. dejar la prioridad en 11 pero reemplazar $#38; en lugar de solo &
30 oct 2011 21:50:14
0

Esto también puede ser causado por esc_url. Deberías usar esc_url_raw en su lugar, en este escenario.

esc_url tiene este fragmento de código:

// Reemplaza ampersands y comillas simples solo cuando se muestra.
if ( $_context === 'display' ) {
    $url = wp_kses_normalize_entities( $url );
    $url = str_replace( '&amp;', '&#038;', $url ); <!-- ¡Mira esta línea!
    $url = str_replace( "'", '&#039;', $url );
}

Lo que hace esc_url_raw es simplemente llamar a esc_url y saltarse ese condicional pasando un contexto diferente como argumento.

18 oct 2022 22:25:44
1
-2

Aquí hay una solución más:-

wp-includes\formatting.php >> esc_url ()  >>  comenta la línea <br> $url = str_replace( '&amp;', '&#038;', $url ); 

Funcionó para mí.

8 oct 2013 13:07:56
Comentarios

¡Nunca edites el núcleo, aunque funcione! ¡Tus cambios podrían perderse en la próxima actualización!

Pothi Kalimuthu Pothi Kalimuthu
8 oct 2013 14:03:57