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
11
dar î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.
