2012-04-08 46 views
5
echo preg_match("/\b(בדיקה|מילה)\b/iu", "זוהי בדיקה"); 

Vì lý do nào đó, mã này trả về 1 trên một số máy chủ mà tôi đã thử nghiệm, nhưng 0 trên một máy chủ cụ thể.preg_replace + UTF-8 không hoạt động trên một máy chủ nhưng hoạt động trên một máy chủ khác

PCRE được biên dịch với hỗ trợ UTF-8 và hỗ trợ thuộc tính Unicode. Điều gì có thể là vấn đề?

+0

'locale' từ máy chủ này? bộ ký tự mặc định từ máy chủ web? kiểm tra trong "firebug" tiêu đề phản ứng của mã hóa – ZiTAL

+0

@ZiTAL Giống như trên các máy chủ khác: Accept-Charset: ISO-8859-1, utf-8; q = 0.7, *; q = 0.3 – Lior

+0

giá trị của chúng ta là bao nhiêu os này? 'print_r (mb_detect_order());' – ZiTAL

Trả lời

2

Có thể có sự khác biệt giữa các phiên bản PCRE mà PHP sử dụng.

PHP và PCRE phiên bản: http://php.net/pcre.installation

Bạn nên sử dụng 8.10+ (PHP 5.3.4+)

Version 8.10 25-Jun-2010:

  1. Added PCRE_UCP để làm \ b, \ d \ s, \ w, và một số lớp nhân vật POSIX nhất định sử dụng các thuộc tính Unicode. (* UCP) ở đầu mẫu có thể được sử dụng để đặt tùy chọn này. Sửa đổi pcretest để thêm/W để kiểm tra cơ sở này. Đã thêm REG_UCP để cung cấp thông qua giao diện POSIX.

Edit: Chỉ cần thực hiện một số xét nghiệm và nó mang lại cho 1 trên PHP 5.3.10 và 0 trên PHP 5.3.2 và PHP 5.3.3.

1

Nó có thể phụ thuộc vào phiên bản của lib PCRE. Để làm cho mọi thứ được chuẩn hóa hơn, hãy thử sử dụng «động từ UCP»: preg_match('/(*UCP)\b(בדיקה|מילה)\b/iu', 'זוהי בדיקה').

Vẫn yêu cầu PCRE v8.10, được gửi bằng PHP từ 5.3.4 hoặc khi được đề cập trong cờ biên dịch --with-pcre-regex=DIR.

Ref (in russian)

Các vấn đề liên quan