Risposte:
Ci sei quasi. La funzione di cui hai bisogno è sanitize_title_with_dashes ($ title)
èäç
ecc. Rimarranno al loro posto con questa funzione.
sanitize_title_with_dashes
oltre a sanitize_title
lasciare alcuni caratteri speciali che potrebbero rompere alcuni sistemi. Voglio un approccio più universale per ridurre le stringhe dare un'occhiata asanitize_html_class
Bene, c'è già una risposta, ma volevo espanderla un po ', quindi ecco i miei risultati:
Se diamo un'occhiata wp_insert_post()
vediamo, $post_name
viene sanificato usando wp_sanitize_title()
(vedi wp-includes/post.php
)
Nella funzione sanitize_title()
abbiamo un filtro sanitize_title
. Questo è interessante, poiché nei filtri predefiniti sanitize_title_with_dashes()
è agganciato a questo filtro (vedi wp-includes/default-filters.php
).
<?php
echo sanitize_title( 'Â+ÄÖßáèäç' ) // aaeoessaeaec
?>
Ho provato sanitize_title () ma nel risultato lascia% c2% a0.
Sembra strano. Sarebbe bello conoscere il valore di input, ma seguire wp_insert_post()
sanitize_title()
sembra essere sufficiente.
sanitize_title()
sembra essere l'unico di cui hai bisogno.
Nella riga 211 di wp-Includes / default-filters.php troverai:
add_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3);
Ciò significa che la chiamata sanitize_title()
rimuoverà prima tutti i caratteri speciali, quindi applicherà il sanitize_title
filtro, chiamando cosìsanitize_title_with_dashes()
Come ha sottolineato @JHoffmann, la semplice chiamata sanitize_title_with_dashes()
non rimuoverà i caratteri speciali.
Oltre alla grande risposta del websupporter ho trovato quanto segue:
A seconda dell'utilizzo dipenderà da ciò di cui hai bisogno.
sanitize_title()
come dice:
gli accenti vengono rimossi (i caratteri accentati vengono sostituiti con equivalenti non accentati)
... e sanitize_title_with_dashes
dice:
Nota che non sostituisce i caratteri accentati speciali
Quindi, con questa stringa di esempio :Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç
sanitize_title()
risultato:
aa-o-sa% 20-oo-pp -_- eac
Come puoi vedere, ha sostituito i caratteri accentati con i loro equivalenti non accentati e ha rimosso tutti gli altri caratteri non alfanumerici a parte i %
quali è seguito da un numero, ma vedrai che è stato rimosso quando è stato seguito da una lettera; forse questo perché lo percepisce come già codificato . Ciò viene applicato quando si tenta di inserire %c3
nella stringa, non lo spoglia come%c3
è una sequenza di codifica valida.
sanitize_title_with_dashes
risultato:
% C3% a2% c3% A4% c3% B6% c3% 9F% c3% A1% 20-oo-pp -_-% c3% a8% c3% a4% c3% a7
Come puoi vedere, non ha rimosso i caratteri accentati, ma li ha codificati.
Ora diamo un'occhiata a una stringa con senza caratteri accentati per vedere come si comportano entrambi ...
Esempio di stringa: %%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~'
sanitize_title()
risultato:
Building-% 20-oo-pp-_
sanitize_title_with_dashes
risultato:
Building-% 20-oo-pp-_
Come puoi vedere sono esattamente gli stessi. Quindi sembra che l'unica differenza sia che uno codifica i charter accentati mentre l'altro li sostituisce .