回答:
あなたはほとんどそこにいます。必要な関数はsanitize_title_with_dashes($ title)です
èäç
などは、この機能で所定の位置に留まりますが。
sanitize_title_with_dashes
てくださいsanitize_title
。文字列を減らすためのより普遍的なアプローチが必要ですsanitize_html_class
さて、すでに答えがありますが、私はそれを少し拡大したかったので、ここに私の発見があります:
見てみると、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()
で十分です。
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()
も特殊文字は削除されません。
ウェブサポーターの素晴らしい答えに加えて、私は以下を見つけました:
使用法に応じて、必要なものに依存します。
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-_
ご覧のとおり、それらはまったく同じです。したがって、それらの唯一の違いは、一方がアクセント付きチャーターをエンコードし、他方がそれらを置き換えることです。