Là sanitize_title đủ để tạo ra sên bài?


16

Tôi muốn tạo slug cho một số chuỗi mà không thông qua luồng tạo slug WordPress. Do đó, tôi muốn biết nó gọi hàm nào để có được một con sên gọn gàng. Tôi đã thử sanitize_title () nhưng kết quả là% c2% a0.

Câu trả lời:


27

Bạn gần như ở đó. Hàm bạn cần là sanitize_title_with_dashes ($ title)


1
Mặc dù điều này chắc chắn có vẻ đúng, nhưng tôi không rõ sanitize_title_with_dashes dường như làm gì khác với sanitize_title. sanitize_title cũng đang thêm dấu gạch ngang trong đó khoảng trắng là ...
Tim Malone

7
Nếu bạn kiểm tra Codex WordPress để biết sanitize_title_with_dashes ($ title) , bạn sẽ thấy ghi chú 'nó không thay thế các ký tự có dấu đặc biệt' , có nghĩa là các ký tự như èäçv.v. sẽ giữ nguyên vị trí với chức năng này.
JHoffmann

Xin lưu ý rằng sanitize_title_with_dashescũng như sanitize_titleđể lại một số ký tự đặc biệt có thể phá vỡ một số hệ thống. Tôi muốn có một cách tiếp cận phổ quát hơn trong việc giảm các chuỗi hãy xemsanitize_html_class
GDY

2

Vâng, đã có câu trả lời, nhưng tôi muốn mở rộng nó một chút, vì vậy đây là những phát hiện của tôi:

Nếu chúng ta có một cái nhìn trong wp_insert_post()chúng ta thấy, $post_namenó được khử trùng bằng cách sử dụng wp_sanitize_title()(xem wp-includes/post.php)

Trong chức năng sanitize_title()chúng ta có một bộ lọc sanitize_title. Điều này thật thú vị, vì trong các bộ lọc mặc định sanitize_title_with_dashes()được nối vào bộ lọc này (xem wp-includes/default-filters.php).

<?php
echo sanitize_title( 'Â+ÄÖßáèäç' ) // aaeoessaeaec
?>

Tôi đã thử sanitize_title () nhưng kết quả là% c2% a0.

Điều này nghe có vẻ lạ. Sẽ thật tuyệt khi biết giá trị đầu vào, nhưng sau đây wp_insert_post() sanitize_title()dường như là đủ.


2

sanitize_title() dường như là người duy nhất bạn cần

Trong wp-gồm / default-tests.php dòng 211 bạn sẽ tìm thấy:

add_filter( 'sanitize_title', 'sanitize_title_with_dashes', 10, 3);

Điều này có nghĩa là việc gọi sanitize_title()trước tiên sẽ xóa tất cả các ký tự đặc biệt, sau đó áp dụng sanitize_titlebộ lọc, do đó gọisanitize_title_with_dashes()

Như @JHoffmann đã chỉ ra, chỉ cần gọi sanitize_title_with_dashes()sẽ không xóa các ký tự đặc biệt.


Đây phải là câu trả lời đúng
bysanchy 23/07/18

0

Ngoài câu trả lời tuyệt vời của người hỗ trợ web, tôi tìm thấy bên dưới:

Tùy thuộc vào cách sử dụng của bạn, nó sẽ phụ thuộc vào những gì bạn cần.

sanitize_title() như nó nói:

dấu được loại bỏ (ký tự có dấu được thay thế bằng dấu không có dấu)

... và sanitize_title_with_dashesnói:

Lưu ý rằng nó không thay thế các ký tự có dấu đặc biệt

Vì vậy, với chuỗi ví dụ này :Â+Ä Ö %%% ßá %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~ èäç

sanitize_title() kết quả:

aa-o-sa-% 20-oo-pp -_- eac

Như bạn có thể thấy, nó đã thay thế các ký tự có dấu bằng các ký tự không có dấu của chúng nó đã loại bỏ tất cả các ký tự không chữ và số khác ngoài số %được theo sau bởi một số, nhưng bạn sẽ thấy nó bị xóa khi được theo sau bởi một chữ cái; có lẽ điều này là do nó nhận thấy nó đã được mã hóa . Điều này được thi hành khi bạn thử chèn %c3vào chuỗi của mình, nó không loại bỏ nó như %c3là một chuỗi mã hóa hợp lệ.

sanitize_title_with_dashes kết quả:

% c3% a2% c3% a4-% c3% b6-% c3% 9f% c3% a1-% 20-oo-pp -_-% c3% a8% c3% a4% c3% a7

Vì vậy, như bạn có thể thấy nó đã không xóa các ký tự có dấu, nhưng đã mã hóa chúng.

Bây giờ, hãy nhìn vào một chuỗi không có ký tự có dấu để xem cả hai cư xử thế nào ...

Chuỗi ví dụ: %%% building %20 oo %pp + -_^^#@!**()=[]|\/\'"<>?``~'

sanitize_title() kết quả:

tòa nhà-% 20-oo-pp-_

sanitize_title_with_dashes kết quả:

tòa nhà-% 20-oo-pp-_

Như bạn có thể thấy họ là chính xác như vậy. Vì vậy, có vẻ như sự khác biệt duy nhất ở họ là một mã hóa các biểu đồ có dấu trong khi cái còn lại thay thế chúng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.