PHP: bir dize olmayan tüm yazdırılabilir karakterleri kaldırmak için nasıl?

10 Cevap php

Ben karakter 0-31 ve 127 kaldırmak gerekir hayal

Verimli yapmak için bir fonksiyon veya kod parçası var.

10 Cevap

Böyle bir şey bunu yapmalıyım

$string = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string);

Bu aralığı 0-31, 128-255 şey eşleşen ve kaldırır.

Burada diğer cevaplar çoğu hesap unicode karakterleri içine (örn. й ȝ îûηы ე மி ᚉ ⠛) yapmayız. Bu durumda aşağıdakileri kullanabilirsiniz:

$string = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x80-\x9F]/u', '', $string);

Ayrıca şerit isterseniz hat, satırbaşları beslemeleri ve sekmeleri kullanabilirsiniz:

$string = preg_replace('/[\x00-\x1F\x80-\x9F]/u', '', $string);

Temel ASCII karakterleri (yukarıdaki tüm örnek karakterleri elimden olacak) dışında her şeyi soymak isterseniz kullanabilirsiniz:

$string = preg_replace( '/[^[:print:]]/', '',$string);

Referans için bakınız http://www.utf8-chartable.de/

Bu basit:

$string = preg_replace( '/[^[:print:]]/', '',$string);

Karakter sınıfları kullanabilirsiniz

/[[:cntrl:]]+/

Benim UTF-8 uyumlu sürümü:

preg_replace('/[^\p{L}\s]/u','',$value);

Sen tutmak isteyen karakterler dışında her şeyi kaldırmak için düzenli express kullanabilirsiniz:

$string=preg_replace('/[^A-Za-z0-9 _\-\+\&]/','',$string);

Hiçbir şey (yani kaldırın) - harfler AZ veya az, sayıları 0-9, uzay, çizgi (^) olmayan her şeyi, hypen artı işareti ile değiştirir.

preg_replace('/(?!\n)[\p{Cc}]/', '', $response);

Bu (http://uk.php.net/manual/en/regexp.reference.unicode.php) \n satır karakterleriyle bırakarak tüm denetim karakterleri kaldırır. Benim deneyim, kontrol karakterleri en sık yazdırma sorunları oluşmasına neden olanlardır.

Tüm çözümleri kısmen çalışmak, ve hatta aşağıda muhtemelen durumlarda tüm kapsamaz. Benim sorun bir utf8 MySQL tabloya bir dize eklemek için çalışırken oldu. Dize (ve bayt) tüm utf8 uymaktadır, ancak birkaç kötü dizileri vardı. Ben çoğu kontrolü veya biçimlendirme olduğunu varsayabiliriz.

function clean_string($string) {
  $s = trim($string);
  $s = iconv("UTF-8", "UTF-8//IGNORE", $s); // drop all non utf-8 characters

  // this is some bad utf-8 byte sequence that makes mysql complain - control and formatting i think
  $s = preg_replace('/(?>[\x00-\x1F]|\xC2[\x80-\x9F]|\xE2[\x80-\x8F]{2}|\xE2\x80[\xA4-\xA8]|\xE2\x81[\x9F-\xAF])/', ' ', $s);

  $s = preg_replace('/\s+/', ' ', $s); // reduce all multiple whitespace to a single space

  return $s;
}

Ayrıca sorunu derinleştirdi içeriği render vs bağlantısı vs vs sunucusu tablo gibi talked about a little here

İşaretli anwser mükemmel ama aynı zamanda olmayan basılabilir bir karakter olan karakter 127 (DEL) özlüyor

cevabım olacak

$string = preg_replace('/[\x00-\x1F\x7f-\xFF]/', '', $string);

nasıl:

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

Bana dahil etmek istediklerini tam kontrol sağlar