답변:
거의 다 왔습니다. 필요한 기능은 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()
결과:
건물-% 20-oo-pp-_
sanitize_title_with_dashes
결과:
건물-% 20-oo-pp-_
보시다시피 그것들은 정확히 동일합니다. 따라서 유일한 차이점은 하나 는 강조된 헌장을 인코딩 하고 다른 하나 는 이를 대체 한다는 것입니다.