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_dashesoltre a sanitize_titlelasciare 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_nameviene 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_titlefiltro, 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_dashesdice:
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 %c3nella 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 .