Hàm str_word_count() trả về một mảng chứa tất cả các từ trong một chuỗi. Nó hoạt động rất tốt, ngoại trừ khi sử dụng các ký tự đặc biệt. Trong trường hợp này, kịch bản php nhận chuỗi qua chuỗi truy vấn:Hỗ trợ các ký tự đặc biệt với str_word_count()
Khi tôi mở: http://localhost/index.php?q=this%20wórds
header('Content-Type: text/html; charset=utf-8');
print_r(str_word_count($_GET['q'],1,'ó'));
Thay vì trả lại:
[0] this
[1] wórds
... nó sẽ trả về:
[0] this
[1] w
[2] rds
Cách chức năng này có thể hỗ trợ các ký tự đặc biệt đó mũ đang được gửi qua chuỗi truy vấn?
Cập nhật - nó làm việc ra tốt bằng cách sử dụng mario 's giải pháp:
function sanitize_words($string) {
preg_match_all("/\p{L}[\p{L}\p{Mn}\p{Pd}'\x{2019}]*/u",$string,$matches,PREG_PATTERN_ORDER);
return $matches[0];
}
Nó cũng hoạt động rất tốt. Điều gì sẽ là sự khác biệt giữa regex 1 và 2? Không thể có được thứ hai để làm việc. – andufo
Điều thứ hai sẽ cho phép những thứ như 'không' được tính là một từ duy nhất. Regex hoàn chỉnh là ''/ [\ pL'] +/u'' tất nhiên. Có một phiên bản khác trong hướng dẫn sử dụng http://de.php.net/manual/en/function.str-word-count.php#85592 mà có lẽ bao gồm tất cả các biến thể đánh máy khác của những gì nên được coi là một từ. – mario
"/ \ p {L} [\ p {L} \ p {Mn} \ p {Pd} '\ x {2019}] */u" --- cảm ơn! – andufo