以下是我从php/ext/standard/string.c中找到的strtolower()函数源码:
PHPAPI char *php_strtolower(char *s, size_t len)
{
unsigned char *c, *e;
c = s;
e = c+len;
while (c < e) {
*c = tolower(*c);
c++;
}
return s;
}
strtolower()函数会调用glibc中的tolower()函数将每个字符进行转换,但是这个tolower()函数会跟本地化环境有关系。
比如一次编程,在我本机上(windows中文)对"越狱A"进行strtolower()转换,得到的是"越狱a",但是在某台linux机器上执行转换,得到的却是一堆乱码+"a",显然这个函数也对中文字符进行了转换。
这个bug不是strtolower()的问题,而是tolower的问题,他会根据你的本地化进行转换,和本地化设置有关的几个变量是:
LANG
LC_*(LC_CTYPE, LC_NUMERIC,等等)
LC_ALL
从上到下优先级越来越高。也就是如果你设定了LC_ALL=zh_CN.gb2312,那么其他的再怎么设定都是徒劳。变量等号后面的值遵循“语言[_地域[.字符集]]”的格式。
LANG的设定,一般在/etc/sysconfig/i18n中,但是有些版本在/etc/rc.sysinit中也设定LC_ALL或者LC_CTYPE等来覆盖/etc/sysconfig/i18n中的变量
知道strtolower()存在的问题,我们就应该着手解决,这里有几种解决方式:
1. 这是strlocale()然后进行转换:
strlocale(LC_ALL, 'zh_CN.gb2312');
strtolower($text);
实验后发现,这个居然不行,疑惑...
2. 如果就是为了转换英文字母,那么手动转换也可以:
引用
/**
* 为了避免出现因为系统字符集不同而而出现的将某些非英文字母也进行大小写转换,
* 从而出现乱码的问题
*
* @param string $value
* @return string
*/
function estrtolower($value){
return str_replace(
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'),
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'),
$value
);
}
我没试过上面这种方法通不通用(因为那个环境比较特殊,身边不好找),但我估计这个办法也不行,我目前使用的方法是
urldecode(strtolower(urlencode($value)));
等几天看看这样是不是会有问题...
珍贵参考:
locale 详解:http://www.chinaunix.net/jh/6/834459.html
但是这里的问题不知道谁能说得更清楚些?我他出现的那个情况的原因还有点疑惑
http://bbs.chinaunix.net/thread-1283161-1-1.html
分享到:
相关推荐
PHP的strtolower()和strtoupper()函数在安装非中文系统的服务器下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode文字的字符串大小写转换。
strtoupper() 函数把字符串转换为大写而strtolower函数: 该函数将传入的字符串参数所有的字符都转换成小写,并以小定形式...下面通过本文给大家分享php大小写转换函数(strtolower、strtoupper)用法,需要的朋友参考下吧
PHP 中,strtolower() 函数的功能是将给定的字符串全部转换为小写字母,因此,正确答案是 A。 HTML 中,表格单元格的"值"是存储在 〈td〉 标签里,因此,正确答案是 B。 PHP 中,将一个值或变量转换为字符类型...
总之,`strtolower`和`strtoupper`是PHP中处理字符串大小写的必备工具。理解并熟练运用这两个函数,能帮助开发者更高效地完成字符串操作,提升代码质量。在编写PHP程序时,根据实际需求灵活运用这些函数,可以确保...
在PHP编程中,图片上传是常见的功能之一,广泛应用于各种网站和应用中,如社交媒体、电商网站等。本文将详细讲解如何实现一个简单的图片上传功能,以标题中的"php图片上传源代码"为例,结合描述中提及的实际检测效果...
50.replace 和 strtolower:在 PHP 中,replace 是指替换字符串,而 strtolower 则是指转换为小写字符串。 51.strtoupper 和 position:在 PHP 中,strtoupper 是指转换为大写字符串,而 position 则是指位置信息。...
php2go实现了如`strlen()`、`strpos()`、`str_replace()`、`strtolower()`等函数,使得在Go中处理字符串变得更加灵活,可以轻松完成查找、替换、大小写转换等任务。 2. 数组操作: PHP的数组功能强大,php2go通过...
- **strtolower()**: `strtolower()`函数用于将字符串中的所有字母转换为小写。 ### 16. 表格单元格内容 **知识点解析:** - ****: `<td>`标签用于定义表格中的单元格内容。 ### 17. 转换为字符串类型 **知识点...
在PHP编程中,字符串是日常开发中最常见的数据类型之一,用于处理文本信息。在本教程“Dreamweaver8+PHP动态网站开发从入门到精通-6-PHP字符串运用”中,我们将深入探讨PHP如何处理字符串,包括其创建、操作以及在...
在IT行业中,PHP是一种广泛应用的服务器端脚本语言,尤其在Web开发领域有着广泛的使用。ThinkPHP是中国的一个知名PHP框架,它提供了丰富的功能和工具,帮助开发者快速构建高效、稳定的应用程序。在这个主题中,我们...
在PHP中,上传图片是一项常见的任务,特别是在构建网站或应用时。这个"php上传图片并预览源码"示例提供了HTML和PHP两种语言的代码,帮助开发者理解如何实现这一功能。下面我们将深入探讨其中涉及的关键知识点。 1. ...
在PHP中,文件上传是一项常见的功能,特别是在网页应用中,如图像上传、文档分享等。本教程将通过WAMP(Windows、Apache、MySQL、PHP)集成环境和PHPStorm IDE,来讲解如何实现PHP文件上传,并在HTML页面上展示上传...
PHP中也有类似JavaScript的`.toLowerCase()`和`.toUpperCase()`函数,它们分别是`strtolower()`和`strtoupper()`: ```php $lowercase_str = strtolower($str); $uppercase_str = strtoupper($str); ``` PHP的`...
在字符串处理方面,PHP提供了丰富的函数,如`strlen`计算字符串长度,`strpos`查找子串位置,`strtolower`和`strtoupper`转换大小写。此外,还有用户自定义函数,你可以根据需求创建自己的功能模块。 对于数据库...
在“php培训讲义2Php语法.pptx”中,主要讲解了PHP的基本语法,包括: 1. **语法简介** - **Hello World**:PHP的第一个示例通常是一个简单的"Hello, World"程序,它展示了如何在HTML中嵌入PHP代码。PHP代码以`<?...
$user_id=strtolower($PHP_AUTH_USER); $password=$PHP_AUTH_PW; $query = mysql_query("select * from users where user_id='$user_id' and password='$password'"); if(!mysql_num_rows($query)) { Header("-...
字符串函数.pdf:这个章节详细介绍了PHP中用于处理字符串的各种函数,如`strlen()`用于计算字符串长度,`str_replace()`用于替换字符串中的特定字符或子串,`strpos()`用于查找子串在字符串中的位置,`strtolower()`...