Reicht sanitize_title aus, um Post-Slugs zu generieren?

16

Ich möchte für einige Zeichenfolgen einen Slug generieren, ohne den Generierungsfluss für WordPress-Slugs zu durchlaufen. Daher möchte ich wissen, welche Funktionen es aufruft, um eine saubere Schnecke zu bekommen. Ich habe sanitize_title () ausprobiert, aber es verbleibt% c2% a0 im Ergebnis.

ein Ventilator
quelle

Antworten:

27

Du bist fast am Ziel. Die Funktion, die Sie benötigen, ist sanitize_title_with_dashes ($ title)

Brady
quelle
1
Während dies definitiv richtig erscheint, bin ich mir ein wenig unklar, was sanitize_title_with_dashes anders zu tun scheint als sanitize_title. sanitize_title fügt auch Bindestriche bei Leerzeichen hinzu ...
Tim Malone
7
Wenn Sie die Wordpress Codex für überprüfen sanitize_title_with_dashes ($ title) , werden Sie die Notiz sehen ‚es ist kein Ersatz für besondere akzentuierte Zeichen‘ , die mittels Zeichen wie èäçusw. werden mit dieser Funktion an ihrem Platz bleiben.
JHoffmann
Bitte beachten Sie, dass sanitize_title_with_dashesauch sanitize_titleeinige Sonderzeichen lassen , dass einige Systeme brechen. sanitize_html_class
Wenn
2

Nun, es gibt bereits eine Antwort, aber ich wollte sie ein wenig erweitern. Hier sind meine Ergebnisse:

Wenn wir einen Blick hinein werfen wp_insert_post(), sehen wir, dass der $post_namemit wp_sanitize_title()(siehe wp-includes/post.php) desinfiziert wird.

In der Funktion haben sanitize_title()wir einen Filter sanitize_title. Dies ist interessant, da standardmäßig Filter sanitize_title_with_dashes()in diesen Filter eingebunden sind (siehe wp-includes/default-filters.php).

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

Ich habe sanitize_title () ausprobiert, aber es verbleibt% c2% a0 im Ergebnis.

Das hört sich komisch an. Es wäre toll, den Eingabewert zu kennen, aber das Folgen wp_insert_post() sanitize_title()scheint zu genügen.

Websupporter
quelle
2

sanitize_title() scheint der einzige zu sein, den du brauchst.

In wp-includes / default-filters.php Zeile 211 finden Sie:

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

Das bedeutet, dass beim Aufrufen sanitize_title()zuerst alle Sonderzeichen entfernt und dann der sanitize_titleFilter angewendet und somit aufgerufen wirdsanitize_title_with_dashes()

Wie @JHoffmann betonte, werden durch einfaches Aufrufen sanitize_title_with_dashes()keine Sonderzeichen entfernt.

Jules
quelle
Dies sollte die richtige Antwort sein
bysanchy
0

Neben der großartigen Antwort von Websupporter habe ich Folgendes gefunden:

Abhängig von Ihrer Nutzung kommt es darauf an, was Sie brauchen.

sanitize_title() wie es sagt:

Akzente werden entfernt (akzentuierte Zeichen werden durch nicht akzentuierte ersetzt)

... und sanitize_title_with_dashessagt:

Beachten Sie, dass Sonderzeichen mit Akzent nicht ersetzt werden

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

sanitize_title() Ergebnis:

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

Wie Sie sehen, hat es Zeichen mit Akzent durch ihre nicht-akzentuierten Entsprechungen ersetzt und alle anderen nicht-alphanumerischen Zeichen mit Ausnahme der Zeichen, auf die %eine Zahl folgt, entfernt. Sie werden jedoch feststellen, dass sie entfernt wurden, als ein Buchstabe darauf folgte. Vielleicht liegt es daran, dass es es als bereits codiert wahrnimmt . Dies wird erzwungen, wenn Sie versuchen, %c3eine Zeichenfolge einzufügen. Die Zeichenfolge wird nicht entfernt, da %c3es sich um eine gültige Codierungssequenz handelt.

sanitize_title_with_dashes Ergebnis:

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

Wie Sie sehen, wurden die Zeichen mit Akzenten nicht entfernt, sondern codiert.

Schauen wir uns nun eine Zeichenfolge ohne Akzentzeichen an, um zu sehen, wie sich beide verhalten ...

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

sanitize_title() Ergebnis:

Gebäude-% 20-oo-pp-_

sanitize_title_with_dashes Ergebnis:

Gebäude-% 20-oo-pp-_

Sie sehen also, dass sie genau gleich sind. Der einzige Unterschied besteht also darin, dass eine Charta mit Akzent codiert, während die andere sie ersetzt .

Brett
quelle