Ответы:
Вы почти там. Вам нужна функция 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() кажется, единственный, что вам нужно.
В строке 211 wp-includes / default-filters.php вы найдете:
add_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3);
Это означает, что при вызове sanitize_title()сначала будут удалены все специальные символы, затем будет применен sanitize_titleфильтр, таким образом, вызовsanitize_title_with_dashes()
Как отметил @JHoffmann, простое обращение sanitize_title_with_dashes()не удалит специальные символы.
В дополнение к отличному ответу websupporter я нашел следующее:
В зависимости от вашего использования это будет зависеть от того, что вам нужно.
sanitize_title() как говорится:
удаляются акценты (акцентированные символы заменяются неакцентированными эквивалентами)
... и sanitize_title_with_dashesговорит:
Обратите внимание, что он не заменяет специальные символы с акцентом
Итак, с этим примером строки:Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç
sanitize_title() результат:
аа-о-SA-% 20-оо-р -_- EAC
Как вы можете видеть, он заменил акцентированные символы их неакцентированными эквивалентами и удалил все другие не алфавитно-цифровые символы, кроме тех, %за которыми следует число, но вы увидите, что он был удален, когда за ним следовала буква; возможно, это потому, что он воспринимает это как уже закодированное . Это применяется, когда вы пытаетесь вставить %c3в вашу строку, она не удаляется, как %c3допустимая последовательность кодирования.
sanitize_title_with_dashes результат:
% C3% а2% с3% A4-% с3% b6-% C3% 9F% с3% A1-% 20-оо-р -_-% с3% а8% с3% а4% с3% а7
Итак, как вы можете видеть, он не удаляет акцентированные символы, а кодирует их.
Теперь давайте посмотрим на строку без акцентированных символов, чтобы увидеть, как они оба ведут себя ...
Пример строки: %%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~'
sanitize_title() результат:
20% здание-оо-рр-_
sanitize_title_with_dashes результат:
20% здание-оо-рр-_
Итак, как вы можете видеть, они точно такие же. Таким образом, похоже, единственное различие в них состоит в том, что один кодирует акцентированные хартии, а другой заменяет их.