È sufficiente sanitize_title per generare gli slug dei post?

6 lug 2011, 17:27:29
Visualizzazioni: 28.2K
Voti: 30

Voglio generare uno slug per alcune stringhe senza passare attraverso il flusso di generazione degli slug di WordPress. Pertanto, vorrei sapere quali funzioni vengono chiamate per ottenere uno slug pulito. Ho provato sanitize_title() ma lascia %c2 %a0 nel risultato.

0
Tutte le risposte alla domanda 4
4
32

Ci sei quasi. La funzione di cui hai bisogno è sanitize_title_with_dashes( $title )

6 lug 2011 18:03:26
Commenti

Anche se questo sembra decisamente corretto, non mi è del tutto chiaro cosa faccia di diverso sanitize_title_with_dashes rispetto a sanitize_title. Anche sanitize_title aggiunge trattini dove c'è spazio bianco...

Tim Malone Tim Malone
24 lug 2015 05:31:55

Se controlli il Codex di WordPress per sanitize_title_with_dashes( $title ), vedrai la nota 'non sostituisce i caratteri accentati speciali' il che significa che caratteri come èäç ecc. rimarranno al loro posto con questa funzione.

JHoffmann JHoffmann
26 ago 2015 11:43:25

Nota che sia sanitize_title_with_dashes che sanitize_title lasciano alcuni caratteri speciali che potrebbero causare problemi in alcuni sistemi. Se vuoi un approccio più universale per ridurre le stringhe, dai un'occhiata a sanitize_html_class

GDY GDY
27 feb 2019 17:01:52

Questa risposta è errata, come spiegato nei commenti, e l'autore dovrebbe aggiornarla, magari indicando una risposta più corretta come https://wordpress.stackexchange.com/a/294587/27896

Tyler Collier Tyler Collier
12 giu 2024 23:18:19
1
14

sanitize_title() sembra essere l'unica funzione di cui hai bisogno.

In wp-includes/default-filters.php alla riga 211 troverai:

add_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3);

Questo significa che chiamare sanitize_title() rimuoverà prima tutti i caratteri speciali, poi applicherà il filtro sanitize_title, chiamando così sanitize_title_with_dashes()

Come ha sottolineato @JHoffmann, semplicemente chiamando sanitize_title_with_dashes() non verranno rimossi i caratteri speciali.

20 feb 2018 12:25:23
Commenti

Questa dovrebbe essere la risposta corretta

bysanchy bysanchy
23 lug 2018 11:14:52
0

Bene, esiste già una risposta, ma volevo ampliarla un po', quindi ecco le mie scoperte:

Se diamo un'occhiata a wp_insert_post() vediamo che $post_name viene sanificato utilizzando 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() è collegato a questo filtro (vedi wp-includes/default-filters.php).

<?php
echo sanitize_title( 'Â+ÄÖßáèäç' ) // aaeoessaeaec
?>

Ho provato sanitize_title() ma lascia %c2 %a0 nel risultato.

Questo sembra strano. Sarebbe utile conoscere il valore di input, ma seguendo wp_insert_post() sanitize_title() sembra essere sufficiente.

10 gen 2017 14:58:22
0

Oltre all'ottima risposta di websupporter, ho trovato quanto segue:

A seconda del tuo utilizzo, dipenderà 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 + -_^^#@!**()=[]|\/\'"<>?``~ èäç

Risultato di sanitize_title():

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 tranne il % seguito da un numero, ma vedrai che è stato rimosso quando era seguito da una lettera; forse questo perché lo percepisce come già codificato. Questo è confermato quando provi a inserire %c3 nella tua stringa, non lo rimuove poiché %c3 è una sequenza di codifica valida.

Risultato di sanitize_title_with_dashes:

%c3%a2%c3%a4-%c3%b6-%c3%9f%c3%a1-%20-oo-pp-_-%c3%a8%c3%a4%c3%a7

Quindi come puoi vedere non ha rimosso i caratteri accentati, ma li ha codificati.

Ora osserviamo una stringa senza caratteri accentati per vedere come si comportano entrambi...

Stringa di esempio: %%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~'

Risultato di sanitize_title():

building-%20-oo-pp-_

Risultato di sanitize_title_with_dashes:

building-%20-oo-pp-_

Quindi come puoi vedere sono esattamente gli stessi. Quindi sembra che l'unica differenza tra loro sia che uno codifica i caratteri accentati mentre l'altro li sostituisce.

30 lug 2018 18:53:10