sanitize_title이 포스트 슬러그를 생성하기에 충분합니까? 거치지 않고 일부 문자열에 대한 슬러그를 생성하고

WordPress 슬러그 생성 흐름을 거치지 않고 일부 문자열에 대한 슬러그를 생성하고 싶습니다. 따라서 깔끔한 슬러그를 얻기 위해 어떤 함수를 호출하는지 알고 싶습니다. sanitize_title ()을 시도했지만 결과에 % c2 % a0이 남습니다.



답변

거의 다 왔습니다. 필요한 기능은 sanitize_title_with_dashes ($ title)입니다.


답변

글쎄, 이미 답변이 있지만 조금 확장하고 싶었으므로 여기에 내 결과가 있습니다.

우리가 살펴보면 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-_

보시다시피 그것들은 정확히 동일합니다. 따라서 유일한 차이점은 하나 강조된 헌장을 인코딩 하고 다른 하나 이를 대체 한다는 것입니다.


답변