Come eliminare #038; quando si sostituiscono stringhe nel contenuto

30 ott 2011, 21:16:29
Visualizzazioni: 13.8K
Voti: 3

Sto cercando di aggiungere alcune sostituzioni di stringa a the_title() -

function format_title($content) {
    // Sostituisce & con & seguito da un break line
    $content = str_replace('&','&<br>', $content);
    // Sostituisce ! con ! seguito da un break line
    $content = str_replace('!','!<br>', $content);
    return $content;
}
add_filter('the_title','format_title',11);

Quando provo a sostituire gli ampersand ottengo un "#038;" aggiuntivo dopo la sostituzione (ASCII per ampersand), non sono sicuro del perché questo accada (motivi di sicurezza?) o come creare una soluzione alternativa. Ho provato a sostituire "&" con "& amp ;" ma senza effetto.

L'obiettivo è aggiungere interruzioni di riga in certi punti di un titolo per creare un migliore flusso nella tipografia. Sia il database che il sito hanno codifica UTF8.

0
Tutte le risposte alla domanda 3
0

&#38; è essenzialmente un sinonimo di &amp;. Nel filtro the_title, wptexturize() viene eseguito con priorità 1 (importante!) e effettua questa sostituzione.

Quindi quando arriva alla tua funzione format_title() con priorità 11, invece di sostituire il singolo simbolo &, stai sostituendo (e rompendo) l'entità carattere &#38;.

Puoi dunque:

  1. spostare la tua funzione a priorità 0 e verrà eseguita prima di texturize
  2. mantenere la priorità a 11 ma sostituire $#38; invece del semplice &
30 ott 2011 21:50:14
0

Questo può anche essere causato da esc_url. In questo scenario, dovresti usare esc_url_raw invece.

esc_url contiene questo pezzo di codice:

// Sostituisce le e commerciali e gli apici singoli solo durante la visualizzazione.
if ( $_context === 'display' ) {
    $url = wp_kses_normalize_entities( $url );
    $url = str_replace( '&amp;', '&#038;', $url ); <!-- Guarda questa riga!
    $url = str_replace( "'", '&#039;', $url );
}

Ciò che fa esc_url_raw è semplicemente chiamare esc_url e saltare quel condizionale passando un contesto diverso come argomento.

18 ott 2022 22:25:44
1
-2

Ecco un'altra soluzione:-

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

Funziona nel mio caso.

8 ott 2013 13:07:56
Commenti

Non modificare mai il core, anche se funziona! Le tue modifiche potrebbero non rimanere al prossimo aggiornamento!

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