Come eliminare #038; quando si sostituiscono stringhe nel contenuto
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.
& è essenzialmente un sinonimo di &. 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 &.
Puoi dunque:
- spostare la tua funzione a priorità
0e verrà eseguita prima di texturize - mantenere la priorità a
11ma sostituire$#38;invece del semplice&
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( '&', '&', $url ); <!-- Guarda questa riga!
$url = str_replace( "'", ''', $url );
}
Ciò che fa esc_url_raw è semplicemente chiamare esc_url e saltare quel condizionale passando un contesto diverso come argomento.