Sanitize_title post sümüklü böcek üretmek için yeterli mi?


16

WordPress slug nesil akışı geçmeden bazı dizeler için slug oluşturmak istiyorum. Bu nedenle, düzgün bir bilgi almak için hangi işlevleri çağırdığını bilmek istiyorum. Sanitize_title () denedim ama sonuç olarak% c2% a0 bırakır.

Yanıtlar:


27

Neredeyse bitti. İhtiyacınız olan işlev sanitize_title_with_dashes ($ title)


1
Bu kesinlikle doğru görünse de, sanitize_title_with_dashes'ın sanitize_title için farklı ne yaptığı biraz belirsiz. sanitize_title ayrıca boşlukların olduğu çizgileri de ekliyor ...
Tim Malone

7
Eğer için WordPress Kodeksi işaretlerseniz sanitize_title_with_dashes ($ title) , sen notu göreceksiniz 'özel aksanlı karakterler yerine geçmez' gibi araçlar karakterler èäçvb bu işlevle yerinde kalacak.
JHoffmann

O notu Lütfen sanitize_title_with_dashesyanı sıra sanitize_titlebazı sistemlerin kırabilir bazı özel karakterleri bırakın. Dizeleri azaltmada daha evrensel bir yaklaşım istiyorumsanitize_html_class
GDY

2

Zaten bir cevap var, ama biraz genişletmek istedim, işte bulgularım:

Eğer bir göz atarsak wp_insert_post()görürüz, $post_namekullanarak sterilize edilir wp_sanitize_title()(bkz. wp-includes/post.php)

Fonksiyonda sanitize_title()bir filtremiz var sanitize_title. Bu ilginçtir, çünkü varsayılan filtrelerde sanitize_title_with_dashes()bu filtreye asılır (bkz. wp-includes/default-filters.php).

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

Sanitize_title () denedim ama sonuç olarak% c2% a0 bırakır.

Kulağa tuhaf geliyor. Girdi değerini bilmek harika olurdu, ancak takip wp_insert_post() sanitize_title()etmek yeterli görünüyor.


2

sanitize_title() ihtiyacınız olan tek şey gibi görünüyor.

Wp-include / default-filters.php satır 211'de şunları bulacaksınız:

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

Bu, çağrının sanitize_title()önce tüm özel karakterleri kaldıracağı, ardından sanitize_titlefiltreyi uygulayacağı vesanitize_title_with_dashes()

@JHoffmann'ın işaret ettiği gibi, sadece aramak sanitize_title_with_dashes()özel karakterleri kaldırmayacaktır.


Bu doğru cevap olmalı
bysanchy

0

Websupporter'ın büyük cevabına ek olarak aşağıdakileri buldum:

Kullanımınıza bağlı olarak, ihtiyacınız olan şeye bağlı olacaktır.

sanitize_title() dediği gibi:

aksanlar kaldırılır (aksanlı karakterler aksanlı olmayan eşdeğerlerle değiştirilir)

... ve sanitize_title_with_dashesdiyor ki:

Özel aksanlı karakterlerin yerini almadığını unutmayın

Yani, bu örnek dize ile:Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç

sanitize_title() sonuç:

aa-o-sa-% 20 oo-s -_- EAC

Eğer gelmiştir görebileceğiniz gibi değiştirilmiştir onların olmayan aksanlı eşdeğerleriyle aksanlı karakterler ve bunun dışında diğer tüm alfasayısal olmayan karakterler kaldırdığı %izleyen bir sayı, ama bunu bir mektupla izledi zaman kaldırıldı göreceksiniz; belki de bunun zaten kodlanmış olarak algılanmasıdır . Bu, dizenize eklemeyi denediğinizde uygulanır, geçerli bir kodlama dizisi %c3olduğu gibi dizgiyi %c3şeritlemez.

sanitize_title_with_dashes sonuç:

% C3% a2% c3% a4-,% c3% b6-% c3% 9f% c3% a1-% 20 oo-s -_-% c3% a8% c3% a4% c3% a7

Gördüğünüz gibi aksanlı karakterleri kaldırmamış, ancak kodlamıştır.

Şimdi bir dize de yapalım bakmak hiçbir aksanlı karakterler nasıl ikisi de davranacağınızı görmemiz için ...

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

sanitize_title() sonuç:

bina-% 20 oo-s-_

sanitize_title_with_dashes sonuç:

bina-% 20 oo-s-_

Gördüğünüz gibi tam olarak aynılar. Bu yüzden, aralarındaki tek fark, birinin vurgulanmış karakterleri kodlarken diğerinin yerini almasıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.