Ответы:
Вы почти там. Вам нужна функция 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% здание-оо-рр-_
Итак, как вы можете видеть, они точно такие же. Таким образом, похоже, единственное различие в них состоит в том, что один кодирует акцентированные хартии, а другой заменяет их.