PHP String karakterleri Çıkarma

8 Cevap php

Ben ya da filtrelemek istiyorum bazı çöp dahil olmayabilir ekranda gösterilmek için bir yem bir dize kabul ediyorum. Ben de tüm normal sembolleri filtre istemiyorum.

Ben böyle bakmak kaldırmak istediğiniz değerler:

Sadece bu ben Kaldırılmasını istediğiniz olmasıdır. Ilgili teknoloji PHP.

Öneriler takdir.

8 Cevap

Yanıtlar için teşekkürler, çocuklar. Ne yazık ki, sunulan bu şu sorun vardı:

bariz nedenlerle yanlış:

ereg_replace("[^A-Za-z0-9]", "", $string);

Bu:

s/[\u00FF-\uFFFF]//

Ben aralık işlemek için regex için sadece çok büyük olduğu için gebelik dönüştürüldüğünde de regex onaysız ereg formunu kullanan da işe yaramadı. Ayrıca, çöp sızmasına izin vereceğini aralığında delik vardır.

Bu öneri:

Bu bir kodlama sorun; O sahte karakterleri temizlemek için deneyin ama siz şifreli bunları alıyorsanız anlamak gerekir.

geçerli iken ben aldığınız verilerin nasıl kodlandığını üzerinde herhangi bir kontrol yok, çünkü hiçbir iyidir. Bu harici bir kaynaktan geliyor. Bazen çöp orada var ve bazen yoktur.

Yani, ben ile geldi çözüm nispeten kirli, ama daha sağlam bir şey yokluğunda Ben sadece tüm standart harf, rakam ve sembolleri kabul ve dinlenme atarak ediyorum.

Bu şimdi çalışmıyor gibi görünüyor. Aşağıdaki gibi bir çözüm:

$fixT = str_replace("£", "£", $string); 
$fixT = str_replace("€", "€", $fixT);
$fixT = preg_replace("/[^a-zA-Z0-9\s\.\/:!\[\]\*\+\-\|\<\>@#\$%\^&\(\)_=\';,'\?\\\{\}`~\"]/", "", $fixT);

Herkes daha iyi bir fikir varsa ben hala onları duymak için istekli değilim. Şerefe.

Bu bir kodlama sorun; O sahte karakterleri temizlemek için deneyin ama siz şifreli bunları alıyorsanız anlamak gerekir.

Unicode olarak veri almak için çalışın, ya da yem sağlayıcısı ile bir anlaşma size hem de aynı kodlamayı kullanarak yapmak.

Sen yazı görüntüleyebilirsiniz gliflerinin aralığının dışında karakterler arıyoruz. Sen yazı tipi görüntüleyebilir ve daha sonra boş bir dize ile bu değerin üstünde bir şey yerini alacak bir regex oluşturabilir maksimum unicode değerini bulabilirsiniz. Bir örnek olacaktır

s/[\u00FF-\uFFFF]//

Bu karakter 255 yukarıdaki şey şerit olacak.

İşte yapmanız için size filtre ne sağlam bir tanımı var ve ne tutmak yok çünkü, zor olacak. Tipik olarak, boş kareleri göstermek karakterler kullandığınız yazı için bir glifi yok bir şey, yani "bu gibi yukarı gösteriyor şeyler:" tanımı korkunç hatalı olduğunu.

Eğer are geçerli (bu veri temizleme her türlü, zaten her zaman iyi bir yaklaşım) tam olarak ne karakter karar ve onlardan biri değil her şeyi atmak için çok daha iyi olurdu. PHP filter function karmaşıklığı ve size gereken sağlamlık düzeyine bağlı olarak bu, yapmak için bir olasılık.

Eğer besleme gelen veri ile sorunu çözmek ve bilgileri filtrelemek için gereken cant sonra bu yardımcı olabilir:

PHP5 filter_input giriş dizelerini filtreleme için çok iyi olduğunu ve olanak rlexability adil bir miktar

filter_input(input_type, variable, filter, options)

Aynı filtreleme gerektiriyorsa da tek satırda form tüm verileri filtreleyebilir :)

Bazı iyi örnekler ve burada bu konuda daha fazla bilgi vardır:

http://www.w3schools.com/PHP/func%5Ffilter%5Finput.asp

PHP sitesi burada seçenekleri hakkında daha fazla bilgi var: Validation Filters

Lütfen dize her byte değerini almak için this question bir göz atın. (Bu multibyte overloading kapalı olduğunu varsayar.)

Eğer bayt sahip olduktan sonra, bu "çöp" karakterler gerçekte ne olduğunu belirlemek için kullanabilirsiniz. Onlar dize kodlama yanlış yorumlayarak, ya da yanlış yazı veya başka bir şey görüntülemeden bir sonucu olduğunuzu mümkündür. Buraya göndermeden ve insanlar size daha fazla yardımcı olabilir.

Bu deneyin:

  • Elle besleme bir örnek indirin.
  • Notepad++ açmak veya başka bir gelişmiş bir metin editörü (Linux üzerinde KATE bunun için iyidir).
  • Kodlama değişen ve bir kodlama dönüştürme inceleyin.

Eğer karakterler düzgün görüntülemek yapan bir ayarı bulursanız, o zaman bu kodlama sitenizi kodlamak veya sitenizde kullanmak ne olursa olsun bu kodlama onu dönüştürmek ya gerekir.

Merhaba Arkadaşlar,

     try this Regular Expression to remove unicode char from the string : 

     /*\\u([0-9]|[a-fA-F])([0-9]|[a-fA-F])([0-9]|[a-fA-F])([0-9]|[a-fA-F])/ 

Thanks, Chintu(prajapati.chintu.001@gmail.com)