Cum să elimini #038; când înlocuiești conținutul în șiruri

30 oct. 2011, 21:16:29
Vizualizări: 13.8K
Voturi: 3

Încerc să adaug unele înlocuiri de șiruri la the_title() -

function format_title($content) {
    // Înlocuiește & cu &<br>
    $content = str_replace('&','&<br>', $content);
    // Înlocuiește ! cu !<br>
    $content = str_replace('!','!<br>', $content);
    return $content;
}
// Adaugă filtru pentru the_title
add_filter('the_title','format_title',11);

Când înlocuiesc ampersand-urile, primesc un "#038;" suplimentar după înlocuire (cod ASCII pentru ampersand), nu sunt sigur de ce se întâmplă asta (motiv de securitate?) sau cum să ocolesc problema. Am încercat să înlocuiesc "&" cu "& amp ;" dar fără efect.

Scopul este să adaug linii noi în anumite puncte ale titlului pentru a crea un flux mai bun în tipografie. Atât baza de date cât și site-ul au codare UTF8.

0
Toate răspunsurile la întrebare 3
0

&#38; este în esență un sinonim pentru &amp;. În filtrul the_title, funcția wptexturize() rulează cu prioritatea 1 (important!) și face această înlocuire.

Deci, până când ajunge la funcția ta format_title() cu prioritatea 11 - în loc să înlocuiești simbolul singular &, tu înlocuiești (și strici) entitatea de caracter &#38;.

Deci poți:

  1. mută funcția ta la prioritatea 0 și va rula înainte de texturizare
  2. lasă prioritatea la 11 dar înlocuiește $#38; în loc de doar &
30 oct. 2011 21:50:14
0

Aceasta poate fi cauzată și de esc_url. În acest scenariu, ar trebui să folosești esc_url_raw în schimb.

esc_url are următorul fragment de cod:

// Înlocuiește ampersand-urile și ghilimelele simple doar la afișare.
if ( $_context === 'display' ) {
    $url = wp_kses_normalize_entities( $url );
    $url = str_replace( '&amp;', '&#038;', $url ); <!-- Vezi această linie!
    $url = str_replace( "'", '&#039;', $url );
}

Ceea ce face esc_url_raw este să apeleze pur și simplu esc_url și să sară peste acea condiție prin transmiterea unui context diferit ca argument.

18 oct. 2022 22:25:44
1
-2

Iată încă o soluție:-

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

Funcționează pentru mine.

8 oct. 2013 13:07:56
Comentarii

Niciodată nu modifica nucleul, chiar dacă funcționează! Modificările tale s-ar putea să nu persiste după următoarea actualizare!

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