©
This document uses PHP Chinese website manual Release
(PHP 4, PHP 5)
strtolower — 将字符串转化为小写
$string
)
将 string
中所有的字母字符转换为小写并返回。
注意 “字母” 与当前所在区域有关。例如,在默认的 “C” 区域,字符 umlaut-A(?)就不会被转换。
string
输入字符串。
返回转换后的小写字符串。
Example #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
?>
Note: 此函数可安全用于二进制对象。
[#1] helvete at bahno dot net [2014-11-26 13:05:04]
It is worth noting that
<?php
var_dump(strtolower(null))
?>
returns:
string(0) ""
[#2] spider_poison at hotmail dot com [2013-10-31 16:14:03]
PT-BR lower case ...
function minuscula($str){
return preg_replace(array("/[?-?]/","/[?-?]/","/[?-?]/","/[?-??]/","/[?-?]/"),array("a","e","i","o","u"),$str);
}
[#3] on at niepodam dot pl [2011-10-24 07:23:38]
If the input string is in different language that server locale, then you should use mb_strtolower() function.
[#4] RCube [2011-03-31 16:57:54]
To convert an entire array to lower, I prefer this method;
<?php
function arraytolower(array $array, $round = 0){
return unserialize(strtolower(serialize($array)));
}
?>
3 lines of code seem a lot less overhead than 10-40.
If there's any intrinsic problem with this method, please post it.
[#5] marcin at maydesign dot pl [2010-06-22 15:16:55]
strtolower(); doesn't work for polish chars
<?php strtolower("m?kA"); ?>
will return: m?ka;
the best solution - use mb_strtolower()
<?php mb_strtolower("m?kA",'UTF-8'); ?>
will return: m?ka
[#6] leha_grobov [2009-06-25 20:03:35]
the strtolower version to support most amount of languages including russian, french and so on:
<?php
function strtolower_utf8($string){
$convert_to = array(
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u",
"v", "w", "x", "y", "z", "??", "??", "?", "?", "?", "?", "?", "?", "??", "??", "??", "?", "??", "??", "?", "?",
"?", "?", "??", "??", "?", "?", "?", "?", "??", "??", "?", "??", "?", "??", "??", "??", "??", "??", "??", "??", "??",
"??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
"??", "??", "??", "??"
);
$convert_from = array(
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U",
"V", "W", "X", "Y", "Z", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?",
"?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "??", "??", "??", "??", "??", "??", "??", "??",
"??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??", "??",
"??", "??", "??", "??"
);
return str_replace($convert_from, $convert_to, $string);
}
?>
[#7] coder at bulgaria dot bg [2009-04-03 16:08:15]
for cyrillic and UTF 8 use mb_convert_case
exampel
<?php
$string = "???????????";
$string = mb_convert_case($string, MB_CASE_LOWER, "UTF-8");
echo $string;
//output is: ??????????
?>
[#8] dbers26 at gmail dot com [2009-01-07 13:34:54]
the function arraytolower will create duplicate entries since keys are case sensitive.
<?php
$array = array('test1' => 'asgAFasDAAd', 'TEST2' => 'ASddhshsDGb', 'TeSt3 '=> 'asdasda@asdadadASDASDgh');
$array = arraytolower($array);
?>
I prefer this method
<?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;
}
?>
which when used like this
<?php
$array = $array = array('test1' => 'asgAFasDAAd', 'TEST2' => 'ASddhshsDGb', 'TeSt3 '=> 'asdasda@asdadadASDASDgh');
$array1 = arraytolower($array);
$array2 = arraytolower($array,true);
print_r($array1);
print_r($array2);
?>
will give output of
Array
(
[test1] => asgafasdaad
[TEST2] => asddhshsdgb
[TeSt3] => asdasda@asdadadasdasdgh
)
Array
(
[test1] => asgafasdaad
[test2] => asddhshsdgb
[test3] => asdasda@asdadadasdasdgh
)
[#9] rodrigoATsistemasparainternetDOTcomDOTbr [2008-09-09 18:25:47]
<?php
function fullLower($str){
// convert to entities
$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);
// convert from entities back to characters
$htmltable = get_html_translation_table(HTML_ENTITIES);
foreach($htmltable as $key => $value) {
$result = ereg_replace(addslashes($value),$key,$result);
}
return(strtolower($result));
}
echo fullLower("? ? ? ? ???");
//results ? ?? ?? ? ?????
//adapted from fullUpper on strtoupper manual
?>
[#10] patricia at steuerungb dot de [2007-10-17 06:29:28]
When you're not sure, how the current locale is set, you might find the following function useful. It's strtolower for utf8-formatted text:
<?php
function strtolower_utf8($inputString) {
$outputString = utf8_decode($inputString);
$outputString = strtolower($outputString);
$outputString = utf8_encode($outputString);
return $outputString;
}
?>
It's not suitable for every occasion, but it surely gets in handy. I use it for lowering German 'Umlauts' like ? and ?.
[#11] rok dot kralj at gmail dot com [2007-06-04 11:49:33]
Slovenian characters
<?php
function strtolower_slovenian($string)
{
$low=array("?" => "?", "?" => "?", "?" => "?");
return strtolower(strtr($string,$low));
}
?>
[#12] marco at recchiuti dot it [2007-05-22 00:43:55]
Maybe it is not so elegant, but it Works.
It's just a fast Idea and it is what I need.
Any hacks for other characters (link !, ? etc etc) should help.
function RemoveShouting($string)
{
$frase = "";
$astri = explode(".", $string);
foreach ($astri as $elem)
$frase .= " ".ucfirst(trim(strtolower($elem))).". ";
return trim($frase);
}
Cheers!
M
[#13] spiceee ddotty spiceee com [2006-03-06 16:53:02]
If you ever need to strtolower a string with href tags on it and doesn't want to mess with the characters inside a tag, this is for you.
<?php
function loweroutsidetags ($str) {
$chars = preg_split ("//", $str);
$tolower = true;
$str = '';
foreach ($chars as $k) {
if ($k == '<') { $tolower = false; }
if ($tolower) { $k = strtolower ($k); }
$str .= $k;
if ($k == '>') { $tolower = true; }
}
return $str;
}
?>
this:
echo loweroutsidetags('aALalala <a href="?q=CASEsENSITIVINESSinURLSareSTUPID">')
will give:
aalalala <a href="?q=CASEsENSITIVINESSinURLSareSTUPID">
[#14] Patrick [2006-01-19 10:57:21]
If you're considering using the below unhtmlentities function from phpContrib, I would suggest this one as an alternative:
<?php
function unhtmlentities($string)
{
// replace numeric entities
$string = preg_replace('~&#x([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string);
$string = preg_replace('~&#([0-9]+);~e', 'chr(\\1)', $string);
// replace literal entities
$trans_tbl = get_html_translation_table(HTML_ENTITIES);
$trans_tbl = array_flip($trans_tbl);
return strtr($string, $trans_tbl);
}
?>
That was copied exactly from the html_entity_decode manual page. It'll handle numeric entities correctly, the below function won't.
[#15] fackelkind [2006-01-11 00:03:01]
Nifty? :D
<?php
function is_lowercase ($str){
return ($str == strtolower ($str));
}
?>
[#16] mhuggins57 at yahoo dot com [2005-07-19 16:04:32]
There's a ucfirst "function" to make the first character uppercase, but there's no "lcfirst" function to make the first character lowercase. Here's my own code to accomplish this.
<?php
function lcfirst($str) {
return strtolower(substr($str, 0, 1)) . substr($str, 1);
}
?>
I found this particularly useful for generating XML nodes with the Reflection class.
[#17] kmcdermott at perimeterinstitute dot ca [2004-12-08 13:04:05]
To do case insensitive comparisons in a database, strtolower() can be a quick and dirty solution:
$Sql = "SELECT * FROM tablename WHERE LOWER(column_name) = '".strtolower($my_var)."'";
[#18] bkimble at ebaseweb dot com [2003-01-19 22:39:44]
Heres a small function I wrote to stop people from submitting data that is ALL IN CAPS SO THEY CAN GET MORE ATTENTION THAT THE REST OF THE USER SUBMITTED DATA on my website :) If you can make it better, by all means do so. This function splits up words delimited by a space, and makes only the first letter of each word capitalized. You can easily modify it so it's only the very first word of the string. I've also added some exceptions so you don't make things like roman numerals look like "Iii" or "Xcmii" or something.
function 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