PHP Conference Japan 2024

strtolower

(PHP 4, PHP 5, PHP 7, PHP 8)

strtolower將字串轉換為小寫

說明

strtolower(字串 $string): 字串

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
?>

注意事項

注意這個函數是二進位安全的。

參見

新增註解

使用者貢獻的註解 13 則註解

marcin at maydesign dot pl
14 年前
strtolower(); 不適用於波蘭語字元

<?php strtolower("mĄkA"); ?>
會返回: mĄka;

最佳解決方案 - 使用 mb_strtolower()

<?php mb_strtolower("mĄkA",'UTF-8'); ?>
會返回: mąka
coder at bulgaria dot bg
15 年前
對於斯拉夫語系文字和 UTF-8,請使用 mb_convert_case

範例

<?php
$string
= "Австралия";
$string = mb_convert_case($string, MB_CASE_LOWER, "UTF-8");
echo
$string;

//輸出為: австралия
?>
helvete at bahno dot net
10 年前
值得注意的是
<?php
var_dump
(strtolower(null))
?>
會返回
string(0) ""
dbers26 at gmail dot com
15 年前
函數 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
)
patricia at steuerungb dot de
17 年前
如果您不確定目前的語系設定為何,您可能會發現以下函式很有用。這是針對 UTF-8 格式文字的 strtolower 函式。

<?php
function strtolower_utf8($inputString) {
$outputString = utf8_decode($inputString);
$outputString = strtolower($outputString);
$outputString = utf8_encode($outputString);
return
$outputString;
}
?>

它並不適用於所有情況,但肯定很方便。我用它來將德語的「變音」ä 和 ö 轉換成小寫。
mhuggins57 at yahoo dot com
19 年前
有一個 ucfirst「函式」可以將第一個字元轉換成大寫,但沒有「lcfirst」函式可以將第一個字元轉換成小寫。這是我的程式碼來完成這個功能。

<?
function lcfirst($str) {
return strtolower(substr($str, 0, 1)) . substr($str, 1);
}
?>

我發現這對於使用 Reflection 類別產生 XML 節點特別有用。
rodrigoATsistemasparainternetDOTcomDOTbr
16 年前
<?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
?>
rok dot kralj at gmail dot com
17 年前
斯洛維尼亞語字元

<?php
函式 strtolower_slovenian($string)
{
$low=array("Č" => "č", "Ž" => "ž", "Š" => "š");
return
strtolower(strtr($string,$low));
}

?>
marco at recchiuti dot it
17 年前
或許這不是那麼優雅,但它有效。
這只是一個快速的想法,正是我需要的。
任何其他字元 (例如 !, ? 等等) 的 hacks 都有幫助。

函式 RemoveShouting($string)
{
$frase = "";
$astri = explode(".", $string);
foreach ($astri as $elem)
$frase .= " ".ucfirst(trim(strtolower($elem))).". ";

return trim($frase);
}

加油!
M
Patrick
18 年前
如果您正在考慮使用 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 說明頁面完整複製過來的。它可以正確處理數字實體,而以下的函式則無法。
bkimble at ebaseweb dot com
21 年前
這是我寫的一個小函式,用來防止人們提交全部大寫的資料,以免在網站上比其他使用者提交的資料更引人注目 :) 如果你能讓它更好,請務必修改它。這個函式會用空格分隔單字,並只將每個單字的首字母大寫。您可以輕鬆修改它,使其僅作用於字串的第一個單字。我還添加了一些例外,這樣就不會讓羅馬數字看起來像「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
RCube
13 年前
要將整個陣列轉換為小寫,我比較喜歡這種方法:

<?php
function arraytolower(array $array, $round = 0){
return
unserialize(strtolower(serialize($array)));
}
?>

3 行程式碼的負荷似乎比 10-40 行少很多。
如果這種方法有任何內在問題,請發布。
kmcdermott at perimeterinstitute dot ca
19 年前
要在資料庫中執行不區分大小寫的比較,`strtolower()` 可以是一個快速但不夠嚴謹的解決方案。

$Sql = "SELECT * FROM tablename WHERE LOWER(column_name) = '".strtolower($my_var)."'";
To Top