2011-09-17 26 views
6

Tôi có một số mã trong một ứng dụng PHP trả về null khi tôi thử và sử dụng nó trên máy chủ sản xuất, nhưng nó hoạt động tốt trên máy chủ phát triển. Đây là dòng mã:Cờ preg_match_all `u` phụ thuộc vào điều gì?

// use the regex unicode support to separate the UTF-8 characters into an array 
preg_match_all('/./us', $str, $match); 

Cờ u phụ thuộc vào điều gì? Tôi đã thử nghiệm với mb_string được bật và tắt và có vẻ như nó không ảnh hưởng đến nó.

Các lỗi tôi nhận được là

preg_match_all: Compilation failed: unknown option bit(s) set at offset -1

hơn thông tin

đây là một trong các tùy chọn trên máy chủ prodction:

'--with-pcre-regex=/opt/pcre'

và ở đây là các phần pcre

Picture.png http://img829.imageshack.us/img829/8524/pictureke.png

Tôi tin rằng đây là @Wesley lưu ý đã đề cập đến:

In order process UTF-8 strings, you must build PCRE to include UTF-8 
support in the code, and, in addition, you must call pcre_compile() 
with the PCRE_UTF8 option flag, or the pattern must start with the 
sequence (*UTF8). When either of these is the case, both the pattern 
and any subject strings that are matched against it are treated as 
UTF-8 strings instead of strings of 1-byte characters. 

Bất kỳ liên kết hoặc lời khuyên về cách để "xây dựng PCRE để bao gồm UTF-8"?

via

kết quả pcretest -C

PCRE version 6.6 06-Feb-2006 
Compiled with 
    UTF-8 support 
    Unicode properties support 
    Newline character is LF 
    Internal link size = 2 
    POSIX malloc threshold = 10 
    Default match limit = 10000000 
    Default recursion depth limit = 10000000 
    Match recursion uses stack 
+0

Bạn có đang thử nghiệm một biến hoặc giá trị không đổi không? Ví dụ của bạn có một biến, tôi nghĩ bạn nên thử nghiệm với một hằng số để đảm bảo bạn đang làm tương tự trên dev và live. – hakre

+1

http://php.net/manual/en/reference.pcre.pattern.modifiers.php, xem các nhận xét là tốt. –

Trả lời

1

Nó phụ thuộc vào PCRE được biên soạn với enable-utf8.

+0

điều này nghe có vẻ đúng - bạn có thể xây dựng được không? Tôi không thấy điều đó trong php_info cho máy phát triển hoặc sản xuất. – cwd

4

Cờ này phụ thuộc vào PCRE được xây dựng với hỗ trợ unicode được bật.

PHP bó thư viện này và thường được xây dựng với hỗ trợ unicode được bật: Trình sửa đổi u khả dụng và luôn hoạt động kể từ PHP 4.1.0, khi PHP được xây dựng bằng thư viện PCRE đi kèm. Tuy nhiên, một số bản phân phối Linux xây dựng PHP dựa trên việc xây dựng PCRE của riêng chúng, không hỗ trợ unicode, và kết quả là công cụ sửa đổi u không hoạt động trên các bản dựng đó.

Giải pháp là sử dụng gói PHP thay thế.

+0

Tôi cần tìm hiểu điều gì nếu nó được kích hoạt và tôi sử dụng ngôn ngữ nào để nói cho sysadmin tôi cần nó có sẵn? Tôi tin rằng hệ thống này dựa trên CentOS. – cwd

+0

Bạn có thể tìm macro PCRE_UTF8 đang được xác định hoặc không có trong /usr/include/pcre.h – arnaud576875

+0

tôi không có quyền truy cập root trên máy sản xuất nhưng tôi có thể truy cập/usr/include và pcre.h không có . cũng đã cập nhật câu hỏi với nhiều thông tin hơn. – cwd

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