Cum să elimini #038; când înlocuiești conținutul în șiruri
Î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.
& este în esență un sinonim pentru &. Î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 &.
Deci poți:
- mută funcția ta la prioritatea
0și va rula înainte de texturizare - lasă prioritatea la
11dar înlocuiește$#38;în loc de doar&
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( '&', '&', $url ); <!-- Vezi această linie!
$url = str_replace( "'", ''', $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.