php mysql: veritabanından özel bir karakteri silmek

4 Cevap php

Ben bazen mysql tabloya, bana verilmiştir CSV dosyalarından veri almak.

Ben yaptım sonuncusu olarak, kayıtların bazılarını gerçek veri önünde garip bir kötü karakteri vardır, ve o benim veritabanında ithal var. Şimdi ben bunu temizlemek için bir yol arıyorum.

Kötü veriler mysql sütununda 'email' olduğunu, bu doğru gerçek veri önünde her zaman gibi görünüyor. PHP kullanarak benim ekranda yazdırmak için çalışırken, o kadar gösterir. CSV dosyasına aktarırken, bu  gibi görünüyor, ve ben SET CHARACTER SET utf8 PHP kullanarak ekrana yazdırmadan önce, normal bir boşluk 'gibi görünüyor eğer.

Ben e-posta adresi alanını düzeltmek ve satır güncellemek, bir anda tüm satırları tek bir gider bir PHP komut dosyası yazma düşünüyordum. Ancak ben "e-posta düzeltme" bölümü hakkında oldukça emin değilim!

Belki bir "patlama" ve sınırlayıcı olarak kötü karakteri kullanmak yapmak için düşünüyordum, ama benim koduna bu karakteri yazın nasıl bilmiyorum.

Altta yatan value/utf8/hex bulmak veya o karaktere ne olursa olsun, o dize bulmak için bir yol olabilir mi?

Ben yeterince açıktır umarım.

Teşekkürler

EDIT: In Hex, it looks like it's A0. What can I do to search and delete a character by its hex value? Either in PHP or directly in MySQL I guess ...

4 Cevap

Ben daha güvenilir iş gibi görünüyor PHP cevabı buldum:

$newemail = preg_replace('/\xA0/', '', $row['oldemail']);

Ve sonra, yeni e-posta ile satır güncellemek için gidiyorum

FROM tablo HEX (alan) SELECT; karakteri belirlemek yardımcı olmalıdır.

Alternatif bir çözüm olarak, aslında kaynağında sorunu gidermek için daha kolay olabilir. Ben Excel ihraç CSV dosyaları ile benzer sorunlarla karşılaşmış ettik ve genel çizgisinde bir şey kullanarak bulduk ...

$correctedLine = mb_convert_variables('UTF-8', 'Windows-1252', $sourceLine);

... Sorunu düzeltmek eğilimindedir. (O dedi, sen de / etkin derlenmiş çoklu bayt dize uzantıya sahip olmasını sağlamak gerekir.)

gibi bir şey ile herhangi bir lider basılamaz ASCII karakter düzeltme yapabilirsiniz:

update t set email = substr(email, 2) where ascii(email) not between 32 and 126

Bu ile soruna char ASCII değerini alabilirsiniz:

select ascii(email) as first_char