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 — 将字符串转换为小写
返回所有 ASCII 字母字符都转换为小写的 string
。
范围在 "A"
(0x41) 到 "Z"
(0x5a) 之间的字节将通过向每个字节值添加 32 来转换为相应的小写字母。
这可以用于转换使用 UTF-8 编码的字符串中的 ASCII 字符,因为多字节 UTF-8 字符将被忽略。要转换多字节非 ASCII 字符,请使用 mb_strtolower()。
string
输入字符串。
返回小写字符串。
版本 | 描述 |
---|---|
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
)
如果您不确定当前区域设置是如何设置的,您可能会发现以下函数很有用。它是适用于 utf8 格式文本的 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
function fullLower($str){
// 转换为实体
$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);
// 将实体转换回字符
$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
function strtolower_slovenian($string)
{
$low=array("Č" => "č", "Ž" => "ž", "Š" => "š");
return strtolower(strtr($string,$low));
}
?>
也许它不够优雅,但它有效。
这只是一个快速的想法,正是我需要的。
任何针对其他字符(例如 !、? 等)的技巧都会有所帮助。
function 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" 之类的东西。
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
为了将整个数组转换为小写,我更喜欢这种方法:
<?php
function arraytolower(array $array, $round = 0){
return unserialize(strtolower(serialize($array)));
}
?>
三行代码的开销似乎比 10-40 行少得多。
如果此方法有任何内在问题,请发布。
要在数据库中进行不区分大小写的比较,`strtolower()` 可以是一个快速而简便的解决方案
$Sql = "SELECT * FROM tablename WHERE LOWER(column_name) = '".strtolower($my_var)."'";