Ben karakter 0-31 ve 127 kaldırmak gerekir hayal
Verimli yapmak için bir fonksiyon veya kod parçası var.
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/
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