Tôi có đoạn code sau trong một file php utf-8:php regex từ ranh giới tương ứng trong utf-8
var_dump(setlocale(LC_CTYPE, 'de_DE.utf8', 'German_Germany.utf-8', 'de_DE', 'german'));
var_dump(mb_internal_encoding());
var_dump(mb_internal_encoding('utf-8'));
var_dump(mb_internal_encoding());
var_dump(mb_regex_encoding());
var_dump(mb_regex_encoding('utf-8'));
var_dump(mb_regex_encoding());
var_dump(preg_replace('/\bweiß\b/iu', 'weiss', 'weißbier'));
Tôi muốn regex cuối cùng để thay thế chỉ từ đầy đủ và không bộ phận của từ.
Trên máy tính của cửa sổ của tôi, nó sẽ trả về:
string 'German_Germany.1252' (length=19)
string 'ISO-8859-1' (length=10)
boolean true
string 'UTF-8' (length=5)
string 'EUC-JP' (length=6)
boolean true
string 'UTF-8' (length=5)
string 'weißbier' (length=9)
Trên webserver (linux), tôi nhận được:
string(10) "de_DE.utf8"
string(10) "ISO-8859-1"
bool(true)
string(5) "UTF-8"
string(10) "ISO-8859-1"
bool(true)
string(5) "UTF-8"
string(9) "weissbier"
Như vậy, regex hoạt động như tôi mong đợi trên cửa sổ nhưng không phải trên linux .
Vì vậy, câu hỏi chính là, làm thế nào tôi nên viết regex của tôi để chỉ phù hợp ở ranh giới từ?
Câu hỏi phụ là làm thế nào tôi có thể cho các cửa sổ biết rằng tôi muốn sử dụng utf-8 trong ứng dụng php của mình.
+1 - '\ w' và' \ b' có vẻ như hoạt động như mong đợi trong các phiên bản PHP gần đây nhưng chắc chắn không phải thứ bạn có thể dựa vào vì chúng có thể bị hỏng khi bạn triển khai ứng dụng của mình. –
Cũng lưu ý câu trả lời được chấp nhận ở đây: http://stackoverflow.com/questions/4781898/regex-word-boundary-does-not-work-in-ut8-on-some-servers nếu bạn muốn sử dụng viết tắt unicode! –