sanitize_titleは投稿スラッグを生成するのに十分ですか?


16

WordPressのスラッグ生成フローを経由せずに、一部の文字列のスラッグを生成したい。したがって、きちんとしたスラッグを取得するために呼び出す関数を知りたいです。sanitize_title()を試しましたが、結果として%c2%a0が残ります。

回答:


27

あなたはほとんどそこにいます。必要な関数はsanitize_title_with_dashes($ title)です


1
これは間違いなく正しいように見えますが、sanitize_title_with_dashesがsanitize_titleに対して異なる動作をするように見えるのは少しわかりません。sanitize_titleも...空白があるダッシュを追加している
ティム・マローン

7
あなたがのためのWordPress Codexのチェックするとsanitize_title_with_dashes($タイトル)を、あなたはノートが表示されます「それは特別なアクセント付き文字に代わるものではありません」のような文字の手段èäçなどは、この機能で所定の位置に留まりますが。
JHoffmann

一部のシステムを破壊する可能性のある特殊文字を残すことに注意しsanitize_title_with_dashesてくださいsanitize_title。文字列を減らすためのより普遍的なアプローチが必要ですsanitize_html_class
GDY

2

さて、すでに答えがありますが、私はそれを少し拡大したかったので、ここに私の発見があります:

見てみると、wp_insert_post()$post_name使用してサニタイズされていますwp_sanitize_title()(を参照wp-includes/post.php

関数sanitize_title()にはフィルターがありますsanitize_title。デフォルトではフィルターsanitize_title_with_dashes()がこのフィルターにフックされているため、これは興味深いものです(参考文献を参照wp-includes/default-filters.php)。

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

sanitize_title()を試しましたが、結果として%c2%a0が残ります。

これは奇妙に聞こえます。入力値を知ることは素晴らしいことですが、以下wp_insert_post() sanitize_title()で十分です。


2

sanitize_title() あなたが必要とする唯一のものであるようです。

wp-includes / default-filters.phpの211行目には、次のものがあります。

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

これは、呼び出しsanitize_title()が最初にすべての特殊文字を削除してからsanitize_titleフィルターを適用することを意味します。sanitize_title_with_dashes()

@JHoffmannが指摘したように、単に呼び出してsanitize_title_with_dashes()も特殊文字は削除されません。


これは正解であるはずです
-bysanchy

0

ウェブサポーターの素晴らしい答えに加えて、私は以下を見つけました:

使用法に応じて、必要なものに依存します。

sanitize_title() それが言うように:

アクセントが削除されます(アクセント記号付きの文字は、アクセント記号のない同等のものに置き換えられます)

...そしてsanitize_title_with_dashes言う:

特別なアクセント付き文字は置き換えられないことに注意してください

したがって、この例の文字列では:Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç

sanitize_title() 結果:

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

あなたはそれがしている見ることができるように置き換え、その非アクセント当量のアクセント付き文字をし、それが離れてから、他の全ての非英数文字削除している%番号が続いているが、あなたはそれが文字が続いたとき、それが削除された表示されます。おそらくこれは、すでにエンコードさいると認識するためです。これは%c3、文字列に挿入しようとすると強制されます%c3。有効なエンコードシーケンスであるため、文字列を削除しません。

sanitize_title_with_dashes 結果:

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

ご覧のとおり、アクセント付き文字は削除されておらず、エンコードされています。

では、アクセント記号のない文字列を見て、両方の動作を確認しましょう...

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

sanitize_title() 結果:

building-%20-oo-pp-_

sanitize_title_with_dashes 結果:

building-%20-oo-pp-_

ご覧のとおり、それらはまったく同じです。したがって、それらの唯一の違いは、一方がアクセント付きチャーターをエンコードし、他方それらを置き換えることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.