2011-12-23 110 views
0

我需要讀取一組文本文件並獲取內容,並且此部分成功。問題是內容包括的一些擴展ACII字符,我用下面的過濾這些字符:只需要過濾擴展的ASCII字符,如Ä,å,à等

$contents = preg_replace('/[^(\x20-\x7F)]*/','', $contents); 

這將刪除所有擴展ASCII字符加上所需的字符,例如撇號,報價等

如何我應該更改preg_replace來執行此操作嗎?

+0

你已經張貼什麼不會刪除引號和撇號。你可以包括一些正在編輯的文本嗎? – 2011-12-23 16:30:35

+0

例如:你去上學。應該是「你會去學校」 – 2011-12-23 16:45:08

+0

你不是說:「你去上學嗎?」它爲我工作。你確定「撇號」不是一些看起來像撇號的其他角色嗎? – 2011-12-23 16:45:46

回答

1

問題不在於您正在過濾的範圍內的ascii '"。問題很可能是Windows智能報價。過濾那些運行在你的更換,你就會有更多的快樂;)

例如,taken from this link

<?php 

function convert_smart_quotes($string) 
{ 
    $search = array(chr(145), 
        chr(146), 
        chr(147), 
        chr(148), 
        chr(151)); 

    $replace = array("'", 
        "'", 
        '"', 
        '"', 
        '-'); 

    return str_replace($search, $replace, $string); 
} 

$contents = convert_smart_quotes($contents); 
$contents = preg_replace('/[^(\x20-\x7F)]*/','', $contents); 
var_dump($contents); 

?> 
+0

我剛剛注意到,當我第一次給出以下兩行,然後給出ASCII的preg_replace時,內容完全正常,但有1000個文本文件,我無法確定其他文本文件是否相同。 – 2011-12-23 17:57:24

+0

$ contents = str_replace('',「’」,$ contents); $ contents = str_replace('',「–」,$ contents); $ contents = preg_replace('/ [^(\ x20- \ x7F)] * /','',$ contents); – 2011-12-23 17:58:03

+0

感謝大家,非常感謝!問題是我所有的文本文件都是unicode,一旦我將它們轉換爲utf-8,就沒有任何擴展的ASCII字符。 – 2011-12-30 16:53:58

相關問題