sanitize_title이 포스트 슬러그를 생성하기에 충분합니까?


16

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

답변:


27

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


1
이것이 정확히 올바른 것처럼 보이지만 sanitize_title_with_dashes가 sanitize_title과 어떻게 다르게 보이는지 약간 불분명합니다. sanitize_title은 공백이있는 곳에 대시를 추가합니다.
Tim Malone

7
당신의 워드 프레스 코덱스 선택하면 sanitize_title_with_dashes ($ 제목) , 당신은 참고 볼 '은 특별한 악센트 문자를 대체하지 않습니다' 와 같은 수단 문자 èäç등이 기능으로 자리에 남아있을 것입니다.
JHoffmann

있습니다 sanitize_title_with_dashes뿐만 아니라 sanitize_title일부 시스템을 깰 수있는 몇 가지 특수 문자를 남겨을. 줄을 줄이는 데보다 보편적 인 접근 방식을 원합니다sanitize_html_class
GDY

2

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

우리가 살펴보면 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()은 충분합니다.


2

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()하면 특수 문자가 제거되지 않습니다.


정답이어야합니다
bysanchy

0

웹 서포터의 훌륭한 답변 외에도 아래를 발견했습니다.

사용법에 따라 필요한 것에 따라 다릅니다.

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-_

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.