\ PHP preg_replace w UTF-8 karakter sadece ikinci bayt kapsar

5 Cevap php

Bu kodu vardır:

$value = preg_replace("/[^\w]/", '', $value);

burada $value utf-8 olduğunu. Bu dönüşüm sonra baytlı karakterlerden ilk bayt şeritli. \ W kapak UTF-8 karakter tamamen nasıl yapılır?

Üzgünüm, ben PHP çok iyi değilim

5 Cevap

Yapabildin try with the /u modifier:

Bu değiştirici Perl ile uyumlu PCRE'nin işlevselliği açar. Desen UTF-8 olarak kabul edilir. Bu değiştirici win32'de PHP Unix 4.1.0 veya daha gelen ve PHP 4.2.3 edinilebilir. Desenin UTF-8 geçerliliği PHP 4.3.5 sürümünden beri kontrol edilir.

Bunu yapmayacağım, deneyin

yerine.

Çok PHP . It states that the regex is encoded in UTF8, but I found that it treats the input UTF8 olarak, içinde pcre desenleri bu pis u değiştirici vardır.

Cevap - "u" PCRE'nin Çokbaytlı unicode modunu açmak için, regex için append:

$ Değer = preg_replace ("/ [^ \ w] / u",'', $ değer);

SONUÇ - unicode modunda, PCRE şey çokbaytlı ve o zaman orada değilse, will sorunlar tarihleri ​​toplantı olacak bekliyor. Bu nedenle, UTF-8 için bir şey (dönüştürmek ve herhangi dönüştürülemeyen önemsiz damla), biz ilk kullanın:

$ Değer = iconv ('ISO-8859-1', 'UTF-8 / / GÖRMEZDEN / / DAMGAÇEVİRİSİ', $ i);

girişini temizlemek ve hazırlık.

Her şey (bazı karanlık karakterler yanlış görünse bile) ISO-8859-1 içine kodlanmış olabilir ve çoğu web tarayıcıları 8859 yılında yerel olarak çalışır beri (UTF-8 kullanmak için söylendi sürece), biz genel olarak bu fonksiyonu buldum çünkü, ', bir şey almak herhangi önemsiz damla, ve UTF-8 dönüştürmek' için güvenli, etkili bir yöntem.

mb_ereg_ * 5.3.0 itibariyle önerilmemektedir - böylece bu fonksiyonlarını kullanarak gitmek için doğru bir yol değildir.

[^\w]+ yerine [^\w] kullanımı

Ayrıca \W [^\w] yerine kullanabilirsiniz