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

किसी कारण से, यह कोड कई सर्वरों पर 1 लौटाता है जिस पर मैंने इसका परीक्षण किया है, लेकिन 0 एक विशिष्ट सर्वर पर।preg_replace + UTF-8 एक सर्वर पर काम नहीं करता है लेकिन दूसरे पर काम करता है

पीसीआरई यूटीएफ -8 समर्थन और यूनिकोड गुण समर्थन के साथ संकलित है। मामला क्या हो सकता है?

+0

इस सर्वर से 'लोकेल'? वेब सर्वर से डिफ़ॉल्ट वर्णमाला? "फायरबग" हेडर में एन्कोडिंग – ZiTAL

+0

@ZiTAL की प्रतिक्रिया की जांच करें यह अन्य सर्वरों जैसा ही है: स्वीकार्य-वर्णसेट: आईएसओ -885 9 -1, यूटीएफ -8; क्यू = 0.7, *; क्यू = 0.3 – Lior

+0

हमारा इनपुट क्या है ओएस यह? 'print_r (mb_detect_order()); – ZiTAL

उत्तर

2

पीसीआरई संस्करणों के बीच अंतर हो सकता है जो PHP उपयोग करते हैं।

PHP और PCRE संस्करणों: http://php.net/pcre.installation

आप का उपयोग करना चाहिए 8.10+ (PHP 5.3.4+)

Version 8.10 25-Jun-2010:

  1. जोड़ा गया PCRE_UCP \ b बनाने के लिए, \ घ, \ एस, \ डब्ल्यू, और कुछ पॉज़िक्स चरित्र वर्ग यूनिकोड गुणों का उपयोग करें। (* यूसीपी) पैटर्न की शुरुआत में इस विकल्प को सेट करने के लिए उपयोग किया जा सकता है। इस सुविधा का परीक्षण करने के लिए संशोधित pcretest जोड़ने/डब्ल्यू। POSIX इंटरफ़ेस के माध्यम से इसे उपलब्ध कराने के लिए REG_UCP जोड़ा गया।

संपादित करें: बस कुछ परीक्षण किया है और यह पीएचपी 5.3.2 और PHP 5.3.3 पर पीएचपी 5.3.10 और 0 पर 1 देता है।

1

यह पीसीआरई lib के संस्करण पर निर्भर हो सकता है। चीजों को और अधिक सामान्य बनाने के लिए, «यूसीपी क्रिया»: preg_match('/(*UCP)\b(בדיקה|מילה)\b/iu', 'זוהי בדיקה') का उपयोग करने का प्रयास करें।

फिर भी इसे पीसीआरई v8.10 की आवश्यकता है, 5.3.4 के बाद से PHP के साथ भेज दिया गया है या जब संकलन ध्वज --with-pcre-regex=DIR में उल्लिखित है।

Ref (in russian)

संबंधित मुद्दे