Réponses:
Tu es presque là. La fonction dont vous avez besoin est sanitize_title_with_dashes ($ title)
èäç
etc. resteront en place avec cette fonction.
sanitize_title_with_dashes
plus de sanitize_title
laisser des caractères spéciaux qui peuvent casser certains systèmes. Si vous voulez une approche plus universelle pour réduire les cordes, jetez un œil àsanitize_html_class
Eh bien, il y a déjà une réponse, mais je voulais l'étendre un peu, voici donc mes conclusions:
Si nous regardons, wp_insert_post()
nous voyons, le $post_name
est assaini en utilisant wp_sanitize_title()
(voir wp-includes/post.php
)
Dans la fonction, sanitize_title()
nous avons un filtre sanitize_title
. Ceci est intéressant, car dans les filtres par défaut sanitize_title_with_dashes()
est accroché à ce filtre (voir wp-includes/default-filters.php
).
<?php
echo sanitize_title( 'Â+ÄÖßáèäç' ) // aaeoessaeaec
?>
J'ai essayé sanitize_title () mais cela laisse% c2% a0 en résultat.
Cela semble étrange. Ce serait formidable de connaître la valeur d'entrée, mais suivre wp_insert_post()
sanitize_title()
semble être suffisant.
sanitize_title()
semble être le seul dont vous avez besoin.
Dans la ligne 211 de wp-includes / default-filters.php, vous trouverez:
add_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3);
Cela signifie que l'appel sanitize_title()
supprimera d'abord tous les caractères spéciaux, puis appliquera le sanitize_title
filtre, appelant ainsisanitize_title_with_dashes()
Comme l'a souligné @JHoffmann, un simple appel sanitize_title_with_dashes()
ne supprimera pas les caractères spéciaux.
En plus de l'excellente réponse du websupporter j'ai trouvé ce qui suit:
En fonction de votre utilisation, cela dépendra de ce dont vous avez besoin.
sanitize_title()
comme il est dit:
les accents sont supprimés (les caractères accentués sont remplacés par des équivalents non accentués)
... et sanitize_title_with_dashes
dit:
Notez qu'il ne remplace pas les caractères accentués spéciaux
Donc, avec cet exemple de chaîne:Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç
sanitize_title()
résultat:
aa-o-sa-% 20-oo-pp -_- eac
Comme vous pouvez le voir, il a remplacé les caractères accentués par leurs équivalents non accentués et il a supprimé tous les autres caractères non alphanumériques à l'exception de celui %
qui est suivi d'un nombre, mais vous verrez qu'il a été supprimé lorsqu'il a été suivi d'une lettre; c'est peut-être parce qu'il le perçoit comme déjà codé . Ceci est appliqué lorsque vous essayez d'insérer %c3
dans votre chaîne, il ne la supprime pas comme %c3
une séquence de codage valide.
sanitize_title_with_dashes
résultat:
% c3% a2% c3% a4-% c3% b6-% c3% 9f% c3% a1-% 20-oo-pp -_-% c3% a8% c3% a4% c3% a7
Comme vous pouvez le voir, il n'a pas supprimé les caractères accentués, mais les a encodés.
Examinons maintenant une chaîne sans caractères accentués pour voir comment ils se comportent tous les deux ...
Exemple de chaîne: %%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~'
sanitize_title()
résultat:
bâtiment-% 20-oo-pp-_
sanitize_title_with_dashes
résultat:
bâtiment-% 20-oo-pp-_
Comme vous pouvez le voir, ils sont exactement les mêmes. Il semble donc que la seule différence entre elles est que l'une code les chartes accentuées tandis que l'autre les remplace .