Apakah sanitize_title cukup untuk menghasilkan siput pos?

16

Saya ingin menghasilkan siput untuk beberapa string tanpa melalui aliran generasi siput WordPress. Karena itu, saya ingin tahu fungsi mana yang dipanggil untuk mendapatkan siput yang rapi. Saya mencoba sanitize_title () tetapi hasilnya tetap% c2% a0.

sebuah kipas
sumber

Jawaban:

27

Anda hampir sampai. Fungsi yang Anda butuhkan adalah sanitize_title_with_dashes ($ title)

Brady
sumber
1
Meskipun ini benar-benar tampak benar, saya agak tidak jelas apa yang sanitize_title_with_dash lakukan secara berbeda untuk sanitize_title. sanitize_title juga menambahkan tanda hubung di mana spasi putih ...
Tim Malone
7
Jika Anda memeriksa WordPress Codex untuk sanitize_title_with_dash ($ title) , Anda akan melihat catatan 'itu tidak menggantikan karakter beraksen khusus' yang berarti karakter seperti èäçdll. Akan tetap di tempat dengan fungsi ini.
JHoffmann
Harap dicatat bahwa sanitize_title_with_dashesjuga sanitize_titlemeninggalkan beberapa karakter khusus yang dapat merusak beberapa sistem. Saya ingin pendekatan yang lebih universal dalam mengurangi string lihatlahsanitize_html_class
GDY
2

Yah, sudah ada jawaban, tapi saya ingin sedikit mengembangkannya, jadi inilah temuan saya:

Jika kita melihat- wp_insert_post()lihat, $post_namekita dibersihkan dengan menggunakan wp_sanitize_title()(lihat wp-includes/post.php)

Dalam fungsi sanitize_title()kami memiliki filter sanitize_title. Ini menarik, karena dalam filter default sanitize_title_with_dashes()terhubung ke filter ini (lihat wp-includes/default-filters.php).

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

Saya mencoba sanitize_title () tetapi hasilnya tetap% c2% a0.

Ini kedengarannya aneh. Akan bagus untuk mengetahui nilai input, tetapi mengikuti wp_insert_post() sanitize_title()tampaknya sudah cukup.

websupporter
sumber
2

sanitize_title() tampaknya menjadi satu-satunya yang Anda butuhkan.

Dalam baris 211 wp-include / default-filter.php Anda akan menemukan:

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

Ini berarti bahwa panggilan sanitize_title()akan menghapus semua karakter khusus terlebih dahulu, kemudian menerapkan sanitize_titlefilter, sehingga memanggilsanitize_title_with_dashes()

Seperti @JHoffmann tunjukkan, hanya menelepon sanitize_title_with_dashes()tidak akan menghapus karakter khusus.

Jules
sumber
Ini harus menjadi jawaban yang benar
bysanchy
0

Selain jawaban hebat websupporter, saya menemukan di bawah ini:

Tergantung pada penggunaan Anda, itu akan tergantung pada apa yang Anda butuhkan.

sanitize_title() seperti yang tertulis:

aksen dihapus (karakter beraksen diganti dengan yang tidak beraksen)

... dan sanitize_title_with_dashesmengatakan:

Perhatikan bahwa itu tidak menggantikan karakter beraksen khusus

Jadi, dengan contoh string ini:Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç

sanitize_title() hasil:

aa-o-sa-% 20-oo-pp -_- eac

Seperti yang Anda lihat, ia telah mengganti karakter beraksen dengan padanannya yang tidak beraksen dan telah menghapus semua karakter non-alfanumerik lainnya selain dari %yang diikuti oleh angka, tetapi Anda akan melihatnya dihapus ketika diikuti oleh huruf; mungkin ini karena ia menganggapnya sudah dikodekan . Ini diberlakukan ketika Anda mencoba memasukkan %c3ke dalam string Anda, itu tidak menghapusnya sebagai %c3urutan penyandian yang valid.

sanitize_title_with_dashes hasil:

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

Jadi seperti yang Anda lihat, karakter aksennya tidak dihapus, tetapi disandikan.

Sekarang mari kita lihat string tanpa aksen karakter untuk melihat bagaimana mereka berdua berperilaku ...

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

sanitize_title() hasil:

gedung-% 20-oo-pp-_

sanitize_title_with_dashes hasil:

gedung-% 20-oo-pp-_

Jadi seperti yang Anda lihat mereka persis sama. Jadi tampaknya satu-satunya perbedaan di antara mereka adalah bahwa satu mengkodekan piagam aksen sementara yang lain menggantikannya .

Brett
sumber