Sanitize_title è abbastanza per generare post slug?


16

Voglio generare lumache per alcune stringhe senza passare attraverso il flusso di generazione delle lumache di WordPress. Pertanto, voglio sapere quali funzioni chiama per ottenere una lumaca pulita. Ho provato sanitize_title () ma nel risultato lascia% c2% a0.

Risposte:


27

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


1
Anche se questo sembra sicuramente corretto, non sono ancora chiaro cosa sembri che Sanitize_title_with_dashes faccia diversamente a sanitize_title. sanitize_title sta anche aggiungendo trattini dove si trova lo spazio bianco ...
Tim Malone

7
Se controlli il codice 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,

Si noti che 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
GDY

2

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.


2

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.


Questa dovrebbe essere la risposta corretta
bysanchy

0

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 .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.