2009-06-09 86 views
2

我想更改php中的字符串從全部大寫到正常情況。這樣每一句話都會以大寫字母開頭,其餘的則以小寫字母開頭。從所有大寫更改爲正常情況下的輸入

有沒有簡單的方法來做到這一點?

+0

怎麼樣縮寫詞和專有名詞像地名?他們是否也應改爲小寫? – 2009-06-09 15:02:22

回答

10

一個簡單的方法是使用strtolower使字符串小寫,並且ucfirst爲大寫的第一個字符如下:

$str=ucfirst(strtolower($str)); 

如果字符串包含多個句子,你必須寫自己的算法,例如在句子分隔符上爆炸並依次處理每個句子。除了第一個字符,你可能還需要一些啓發式的術語,比如「I」和出現在文本中的任何常見專有名詞。例如,這樣的事情:

$sentences=explode('.', strtolower($str)); 
$str=""; 
$sep=""; 
foreach ($sentences as $sentence) 
{ 
    //upper case first char 
    $sentence=ucfirst(trim($sentence)); 

    //now we do more heuristics, like turn i and i'm into I and I'm 
    $sentence=preg_replace('/i([\s\'])/', 'I$1', $sentence); 

    //append sentence to output 
    $str=$sep.$str; 
    $sep=". "; 
} 
+0

我需要更快地輸入我的答案:) – 2009-06-09 15:04:09

2

我不知道任何方法,將自動做到這一點。你可能不得不寫一些自己的規則,這些規則需要像字母'i'這樣的特殊情況在需要時自行處理。你還會錯過利用人和地名等東西的能力。

1

完全有可能

$s = "THIS IS THE LINE I'M GOING TO WORK ON"; 

$s = ucfirst(strtolower($s)); 

echo $s; //This is the line I'm going to work on 
1

如果字符串包含只有1句話,那麼你可以使用:

$string = ucfirst(strtolower($string)); 
2

這裏有一個功能,將做到這一點:

function sentence_case($s) { 
    $str = strtolower($s); 
    $cap = true; 
    for($x = 0; $x < strlen($str); $x++){ 
     $letter = substr($str, $x, 1); 
     if($letter == "." || $letter == "!" || $letter == "?"){ 
      $cap = true; 
     }elseif($letter != " " && $cap == true){ 
      $letter = strtoupper($letter); 
      $cap = false; 
     } 
     $ret .= $letter; 
    } 
    return $ret; 
} 

來源:

http://codesnippets.joyent.com/posts/show/715

0

要記住的一點:不要將其應用於所有輸入字段!如果你把「邁克DF王」到「邁克Df的王」

人們在他們的名字全部大寫首字母可以得到強大的惱火

歡呼:)

相關問題