[Linux] Unicode Support CentOS 5.5, PHP And PCRE

Saya menggunakan CentOS 5.5 dengan webserver apache 2.2.3 dan PHP 5.1.6. Saat akan menggunakan fungsi regex yang berhubungan dengan karakter unicode seperti (\p, \P, \X, dsb) ternyata terdapat error, dan setelah diselidiki ternyata pada PCRE (Perl Compatible Regular Expressions) ada sebuah fungsi yang belum aktif.

Demikian pula saat saya memasang sebuah CMS open source dengan nama RackTables yang akan digunakan untuk inventaris rack, server dan semua peripheral yang ada di Data Center. terdapat sebuah error yang berhubungan dengan PCRE. Error-nya adalah

"PCRE compiled with --enable-unicode-properties FAILED"

PERMASALAHAN:
PHP yang terbaru menggunakan PCRE engine untuk menjalankan fungsi regular expression (regex). Karena itu, kita bisa langsung melakukan query langsung menggunakan pcregrep seperti berikut ini:

[pegasus@svr-cabul ~]$ pcregrep '/\X*/u' character.txt
pcregrep: Error in command-line regex at offset 2: support for P, p, and X has not been compiled


Dan ternyata hasilnya terdapat error, bahwa unicode tidak bisa dilakukan. Kemudian ada juga command pcretest untuk melihat hasil kompilasi pcre yang terpasang di komputer/server kita.
[pegasus@svr-cabul ~]$ pcretest -C
PCRE version 6.6 06-Feb-2006
Compiled with
UTF-8 support
No 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
Dari query diatas tampaklah bahwa memang ada yang kurang dalam kompilasi PCRE. dari query diatas diberitahukan bahwa "UTF-8 support" dan "No Unicode properties support". Hal ini berarti bahwa PRCE diconfig dan dicompile dengan opsi "-enable-utf8" yang memungkinkan PCRE untuk mengenali dan bekerja dengan UTF-8 encoded string. Namun, PCRE tidak dikompilasi dengan "enable-unicode-properties" yang diperlukan mendukung karakter unicode seperti ' \p', ' \P', dan ' \X'.

SOLUSI:
Untuk mengatasi permasalah ini, maka harus dilakukan kompile ulang terhadap PCRE. Karena saya menggunakan CentOS yang berbasi rpm, maka saya mencari src dari PCRE dan menemukannya di kernel.org yaitu di http://mirrors.kernel.org/centos/5.5/os/SRPMS/pcre-6.6-2.el5_1.7.src.rpm.
1. Download src
[pegasus@svr-cabul ~]$ wget http://mirrors.kernel.org/centos/5.5/os/SRPMS/pcre-6.6-2.el5_1.7.src.rpm
2. Install source rpm
[pegasus@svr-cabul ~]$ sudo rpm -ivh pcre-6.6-2.el5_1.7.src.rpm
perintah ini akan menaruh source kedalam folder /usr/src/redhat/SOURCES dan /usr/src/redhat/SPECS

3. Install rpmbuild
rpmbuild nantinya akan digunakan untuk mengkompile paket source rpm
[pegasus@svr-cabul ~]$ sudo yum install rpm-build
4. Lakukan konfigurasi
buka file /usr/src/redhat/SPECS/pcre.spec, kemudian cari baris
%configure --enable-utf8
dan rubah menjadi seperti berikut ini, kemudian simpan
%configure --enable-utf8 --enable-unicode-properties
5. Build rpm baru
[pegasus@svr-cabul ~]$ sudo rpmbuild -ba /usr/src/redhat/SPECS/pcre.spec
hasil akhir dari perintah diatas, akan membuat rpm baru, dan akan muncul seperti ini:
Wrote: /usr/src/redhat/SRPMS/pcre-6.6-2.7.src.rpm
Wrote: /usr/src/redhat/RPMS/i386/pcre-6.6-2.7.i386.rpm
Wrote: /usr/src/redhat/RPMS/i386/pcre-devel-6.6-2.7.i386.rpm
6. Install rpm baru:
[pegasus@svr-cabul src]$ sudo rpm -Uvh redhat/RPMS/i386/pcre-6.6-2.7.i386.rpm
Preparing... ########################################### [100%]
1:pcre ########################################### [100%]
7. Lakukan testing
[pegasus@svr-cabul src]$ 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

Dan akhirnya, server pun sudah support unicode.