Respostas:
Você está quase lá. A função que você precisa é sanitize_title_with_dashes ($ title)
èäç
etc. permanecerão no lugar com esta função.
sanitize_title_with_dashes
, além de sanitize_title
deixar alguns caracteres especiais que podem danificar alguns sistemas. I você quer uma abordagem mais universal na redução cordas dar uma olhadasanitize_html_class
Bem, já existe uma resposta, mas eu queria expandi-la um pouco, então aqui estão minhas descobertas:
Se dermos uma olhada wp_insert_post()
, veremos que o $post_name
é higienizado usando wp_sanitize_title()
(ver wp-includes/post.php
)
Na função sanitize_title()
, temos um filtro sanitize_title
. Isso é interessante, já que nos filtros padrão sanitize_title_with_dashes()
está associado a esse filtro (consulte wp-includes/default-filters.php
).
<?php
echo sanitize_title( 'Â+ÄÖßáèäç' ) // aaeoessaeaec
?>
Eu tentei sanitize_title (), mas deixa% c2% a0 no resultado.
Isso parece estranho. Seria ótimo saber o valor de entrada, mas o seguinte wp_insert_post()
sanitize_title()
parece ser suficiente.
sanitize_title()
parece ser o único que você precisa.
Na linha 211 do wp-includes / default-Filters.php, você encontrará:
add_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3);
Isto significa que chamado sanitize_title()
irá primeiro remover todos os caracteres especiais, em seguida, aplicar o sanitize_title
filtro, pondo assimsanitize_title_with_dashes()
Como apontou @JHoffmann, simplesmente chamar sanitize_title_with_dashes()
não removerá caracteres especiais.
Além da ótima resposta do websupporter, encontrei o abaixo:
Dependendo do seu uso, isso dependerá do que você precisa.
sanitize_title()
como diz:
acentos são removidos (caracteres acentuados são substituídos por equivalentes não acentuados)
... e sanitize_title_with_dashes
diz:
Observe que ele não substitui caracteres acentuados especiais
Portanto, com este exemplo de sequência:Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç
sanitize_title()
resultado:
aa-o-sa-% 20-oo-pp -_- eac
Como você pode ver, ele substituiu caracteres acentuados por seus equivalentes não acentuados e removeu todos os outros caracteres não alfanuméricos, além do %
que é seguido por um número, mas você verá que ele foi removido quando foi seguido por uma letra; talvez seja porque o percebe como já codificado . Isso é aplicado quando você tenta inserir %c3
sua string, não a tira, pois %c3
é uma sequência de codificação válida.
sanitize_title_with_dashes
resultado:
% c3% a2% c3% a4-% c3% b6-% c3% 9f% c3% a1-% 20-oo-pp -_-% c3% a8% c3% a4% c3% a7
Então, como você pode ver, ele não removeu os caracteres acentuados, mas os codificou.
Agora, vamos ver uma sequência sem caracteres acentuados para ver como os dois se comportam ...
Sequência de exemplo: %%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~'
sanitize_title()
resultado:
building-% 20-oo-pp-_
sanitize_title_with_dashes
resultado:
building-% 20-oo-pp-_
Então, como você pode ver, eles são exatamente iguais. Portanto, parece que a única diferença neles é que um codifica cartas acentuadas enquanto o outro as substitui .