PHP Regex - 2 sunucular üzerinde farklı ayrıştırma

3 Cevap php

Ben daha önce görmedim bir sorun var. Aynı regex iki farklı sunucularında iki farklı sonuçlar üretiyor.

Bu kodu:

preg_replace('#[^\pL0-9_@-]#iu', '', '!%&abc123_æøå');

Result on server A (php 5.2.6, Sunucu Api: Apache 2.0 Handler):

abc123_æøå

Result on server B (php 5.2.5, Sunucu Api: CGI / FastCGI):

123_

Bu fark neden oluyor herhangi bir fikir olan herkes?

3 Cevap

Bu olmalı çünkü

  • Yerel ayarlar
  • PHP Çokbaytlı dizeleri / kapalı destek
  • PHP mb_string.func_overload (multibyte destek için bazı fonksiyonların aşırı yüklenmesi)

Yerine mb_eregi_replace işlevini deneyebilirsiniz.

mb_eregi_replace('[^\pL0-9_@-]', '', '!%&abc123_æøå');

Çokbaytlı dizeleri destekleyen tüm sunucular boyunca sürekli çalışması gerekir, ve farklı dosya kodlamalar nedeniyle alabilirsiniz sorunları ortadan kaldırmak gerekir. (Teorik olarak, en azından.)

Eh, sonunda dizildi oluyor. Sunucu (hala olsa, cgi olarak çalışan) php 5.2.5 dan 5.2.11 yükseltilmiş ve sorunlar eski sürümü ile uzağa gitti.

Herkesin geribildirim ve önerileriniz için teşekkür ederiz!