2012-11-08 16 views
2

我正在使用此日常數據Feed。令我驚訝的是,其中一個領域在MySQL之後看起來並不正確。 (我無法控制誰提供飼料。)如何在PHP中去除所有打印字符?

因此,我做了一個mysqldump,並發現郵政編碼和城市這個記錄包含一個非打印字符。它在'vi'中顯示爲: < 200e>

我在使用PHP,我解析這些數據並將其放入MySQL數據庫。我在這方面使用了修剪功能,但這並沒有消除它。問題是,如果您在MySQL數據庫的郵政編碼上進行查詢,它將無法找到包含非打印字符的記錄。

我想在進入MySQL數據庫之前清理它。

我能在PHP中做什麼?起初,我認爲正則表達式只允許a-z,A-Z和0-9,但這對地址不好。地址使用時段,逗號,連字符以及其他我目前沒有考慮的內容。

什麼是最好的方法?我不知道它是如何定義的,除了打印字符之外只能被允許。是否有另外一個像trim這樣的PHP功能來完成這項工作?還是正則表達式?如果是這樣,我想要一個例子。謝謝!

我已經調查使用PHP函數,並且看到了這張貼在PHP.NET:

<?php 
$a = "\tcafé\n"; 
//This will remove the tab and the line break 
echo filter_var($a, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW); 
//This will remove the é. 
echo filter_var($a, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); 
?> 

在使用FILTER_FLAG_STRIP_HIGH確實去掉了< 200E>我提到看到 'VI',I」 m擔心它會以André這樣的名字去掉這封信的口音。

也許正則表達式是解決方案嗎?

+0

來到我面前的第一個想法是一個正則表達式。也許:$ str = preg_replace('/ [^ a-z0-9 \。\,\ - \ s]/i','',$ str);將其他好字符放入正則表達式中。 – user4035

+0

感謝您的發佈。這怎麼能適應包括字母的口音呢? (請參閱上面的編輯)。 – Edward

+1

使用正則表達式和德語和法語特殊字符爲您添加了一個答案。 – user4035

回答

1

這個我試過所有非打印字符:

<?php 
$string = "\tabcde éç ÉäÄéöÖüÜß.,!-\n"; 
$string = preg_replace('/[^a-z0-9\!\.\, \-éâëïüÿçêîôûéäöüß]/iu', '', $string); 
print "[$string]"; 

它給了:

[abcde éç ÉäÄéöÖüÜß.,!-] 

將所有需要的特殊字符添加到正則表達式中。

+0

這完全解決了我的例子,並保留了重音字母。謝謝! – Edward

+0

所以如果我需要支持中文?我應該拍自己? – user3338098

0

如果你用英語工作,也不需要支持Unicode字符,然後讓剛剛[\x20-\x7E]

...並刪除所有其他:

$s = preg_replace('/[^\x20-\x7E]+/', '', $s); 
+0

你在開玩笑嗎? – arkascha

2

我想你可以使用這個小正則表達式替換:

preg_replace('/[^[:print:]]+/', '', $your_value); 

它基本上去掉從$ your_value

相關問題