strtolower(); 不適用於波蘭語字元
<?php strtolower("mĄkA"); ?>
會返回: mĄka;
最佳解決方案 - 使用 mb_strtolower()
<?php mb_strtolower("mĄkA",'UTF-8'); ?>
會返回: mąka
(PHP 4, PHP 5, PHP 7, PHP 8)
strtolower — 將字串轉換為小寫
將 string
中所有 ASCII 字母字元轉換為小寫並回傳。
範圍在 "A"
(0x41) 到 "Z"
(0x5a) 的位元組將會藉由在每個位元組值加上 32 來轉換為對應的小寫字母。
這個函數可以用於轉換 UTF-8 編碼字串中的 ASCII 字元,因為多位元組的 UTF-8 字元會被忽略。要轉換多位元組的非 ASCII 字元,請使用 mb_strtolower()。
字串
輸入的字串。
傳回小寫的字串。
版本 | 說明 |
---|---|
8.2.0 | 大小寫轉換不再依賴於使用 setlocale() 設定的地區設定。只有 ASCII 字元會被轉換。 |
範例 #1 strtolower() 範例
<?php
$str = "Mary Had A Little Lamb and She LOVED It So";
$str = strtolower($str);
echo $str; // 輸出 mary had a little lamb and she loved it so
?>
注意:這個函數是二進位安全的。
strtolower(); 不適用於波蘭語字元
<?php strtolower("mĄkA"); ?>
會返回: mĄka;
最佳解決方案 - 使用 mb_strtolower()
<?php mb_strtolower("mĄkA",'UTF-8'); ?>
會返回: mąka
對於斯拉夫語系文字和 UTF-8,請使用 mb_convert_case
範例
<?php
$string = "Австралия";
$string = mb_convert_case($string, MB_CASE_LOWER, "UTF-8");
echo $string;
//輸出為: австралия
?>
函數 arraytolower 會建立重複的項目,因為鍵值區分大小寫。
<?php
$array = array('test1' => 'asgAFasDAAd', 'TEST2' => 'ASddhshsDGb', 'TeSt3 '=> 'asdasda@asdadadASDASDgh');
$array = arraytolower($array);
?>
/*
陣列
(
[test1] => asgafasdaad
[TEST2] => ASddhshsDGb
[TeSt3] => asdasda@asdadadASDASDgh
[test2] => asddhshsdgb
[test3] => asdasda@asdadadasdasdgh
)
*/
我比較喜歡這個方法
<?php
function arraytolower($array, $include_leys=false) {
if($include_leys) {
foreach($array as $key => $value) {
if(is_array($value))
$array2[strtolower($key)] = arraytolower($value, $include_leys);
else
$array2[strtolower($key)] = strtolower($value);
}
$array = $array2;
}
else {
foreach($array as $key => $value) {
if(is_array($value))
$array[$key] = arraytolower($value, $include_leys);
else
$array[$key] = strtolower($value);
}
}
return $array;
}
?>
像這樣使用時
<?php
$array = $array = array('test1' => 'asgAFasDAAd', 'TEST2' => 'ASddhshsDGb', 'TeSt3 '=> 'asdasda@asdadadASDASDgh');
$array1 = arraytolower($array);
$array2 = arraytolower($array,true);
print_r($array1);
print_r($array2);
?>
會輸出以下結果:
陣列
(
[test1] => asgafasdaad
[TEST2] => asddhshsdgb
[TeSt3] => asdasda@asdadadasdasdgh
)
陣列
(
[test1] => asgafasdaad
[test2] => asddhshsdgb
[test3] => asdasda@asdadadasdasdgh
)
如果您不確定目前的語系設定為何,您可能會發現以下函式很有用。這是針對 UTF-8 格式文字的 strtolower 函式。
<?php
function strtolower_utf8($inputString) {
$outputString = utf8_decode($inputString);
$outputString = strtolower($outputString);
$outputString = utf8_encode($outputString);
return $outputString;
}
?>
它並不適用於所有情況,但肯定很方便。我用它來將德語的「變音」ä 和 ö 轉換成小寫。
有一個 ucfirst「函式」可以將第一個字元轉換成大寫,但沒有「lcfirst」函式可以將第一個字元轉換成小寫。這是我的程式碼來完成這個功能。
<?
function lcfirst($str) {
return strtolower(substr($str, 0, 1)) . substr($str, 1);
}
?>
我發現這對於使用 Reflection 類別產生 XML 節點特別有用。
<?php
函式 fullLower($str){
// 轉換成 HTML 實體
$subject = htmlentities($str,ENT_QUOTES);
$pattern = '/&([a-z])(uml|acute|circ';
$pattern.= '|tilde|ring|elig|grave|slash|horn|cedil|th);/e';
$replace = "'&'.strtolower('\\1').'\\2'.';'";
$result = preg_replace($pattern, $replace, $subject);
// 將 HTML 實體轉換回字元
$htmltable = get_html_translation_table(HTML_ENTITIES);
foreach($htmltable as $key => $value) {
$result = ereg_replace(addslashes($value),$key,$result);
}
return(strtolower($result));
}
echo fullLower("Ã É Ò Õ ÚÙÛ");
//結果 ã é ò õ úùû
//改編自 strtoupper 手冊中的 fullUpper
?>
斯洛維尼亞語字元
<?php
函式 strtolower_slovenian($string)
{
$low=array("Č" => "č", "Ž" => "ž", "Š" => "š");
return strtolower(strtr($string,$low));
}
?>
或許這不是那麼優雅,但它有效。
這只是一個快速的想法,正是我需要的。
任何其他字元 (例如 !, ? 等等) 的 hacks 都有幫助。
函式 RemoveShouting($string)
{
$frase = "";
$astri = explode(".", $string);
foreach ($astri as $elem)
$frase .= " ".ucfirst(trim(strtolower($elem))).". ";
return trim($frase);
}
加油!
M
如果您正在考慮使用 phpContrib 的以下 unhtmlentities 函式,我會建議使用這個函式作為替代方案
<?php
function unhtmlentities($string)
{
// 取代數字實體
$string = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string);
$string = preg_replace('~&#([0-9]+);~e', 'chr(\\1)', $string);
// 取代字面實體
$trans_tbl = get_html_translation_table(HTML_ENTITIES);
$trans_tbl = array_flip($trans_tbl);
return strtr($string, $trans_tbl);
}
?>
這是從 html_entity_decode 說明頁面完整複製過來的。它可以正確處理數字實體,而以下的函式則無法。
這是我寫的一個小函式,用來防止人們提交全部大寫的資料,以免在網站上比其他使用者提交的資料更引人注目 :) 如果你能讓它更好,請務必修改它。這個函式會用空格分隔單字,並只將每個單字的首字母大寫。您可以輕鬆修改它,使其僅作用於字串的第一個單字。我還添加了一些例外,這樣就不會讓羅馬數字看起來像「Iii」或「Xcmii」之類的。
函式 RemoveShouting($string)
{
$lower_exceptions = array(
"to" => "1", "a" => "1", "the" => "1", "of" => "1"
);
$higher_exceptions = array(
"I" => "1", "II" => "1", "III" => "1", "IV" => "1",
"V" => "1", "VI" => "1", "VII" => "1", "VIII" => "1",
"XI" => "1", "X" => "1"
);
$words = split(" ", $string);
$newwords = array();
foreach ($words as $word)
{
if (!$higher_exceptions[$word]) $word = strtolower($word);
if (!$lower_exceptions[$word]) $word[0] = strtoupper($word[0]);
array_push($newwords, $word);
}
return join(" ", $newwords);
}
BK
要將整個陣列轉換為小寫,我比較喜歡這種方法:
<?php
function arraytolower(array $array, $round = 0){
return unserialize(strtolower(serialize($array)));
}
?>
3 行程式碼的負荷似乎比 10-40 行少很多。
如果這種方法有任何內在問題,請發布。
要在資料庫中執行不區分大小寫的比較,`strtolower()` 可以是一個快速但不夠嚴謹的解決方案。
$Sql = "SELECT * FROM tablename WHERE LOWER(column_name) = '".strtolower($my_var)."'";