Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法来界定;ucwords();在PHP中,第一个字符不会自动大写?_Php - Fatal编程技术网

有没有一种方法来界定;ucwords();在PHP中,第一个字符不会自动大写?

有没有一种方法来界定;ucwords();在PHP中,第一个字符不会自动大写?,php,Php,PHP有一个函数ucwords(),它允许自定义分隔符。这很好,将我的测试字符串转换为我的测试字符串没有问题 举个例子:我想做一个超级棒的2009玩家标签 $gamerTag = 'xxx_l33t_xxx'; // Not yet epic. echo ucwords($gamerTag,"x"); // want it to return 'xXx_l33t_xXx' 我假设字符串会区分大小写,并在每种情况下更新第二个x,忽略第三个,因为在这一点上,中间的一个将不再匹配我们的分隔符 但是

PHP有一个函数
ucwords()
,它允许自定义分隔符。这很好,将
我的测试字符串
转换为
我的测试字符串
没有问题

举个例子:我想做一个超级棒的2009玩家标签

$gamerTag = 'xxx_l33t_xxx'; // Not yet epic. 
echo ucwords($gamerTag,"x"); // want it to return 'xXx_l33t_xXx'
我假设字符串会区分大小写,并在每种情况下更新第二个
x
,忽略第三个,因为在这一点上,中间的一个将不再匹配我们的分隔符

但是,这实际上返回
XxX\u l33t\u XxX
,因为它会自动将字符串中的第一个字母大写

我知道还有其他方法可以做到这一点(
strsplit()


有没有办法对
ucwords()
进行定界,使其不会自动将字符串的第一个字符大写

不幸的是,不管传入的分隔符是什么,字符串的第一个字符总是被转换成大写

深入PHP源代码,这是
ucwords
的实现:

*r = toupper((unsigned char) *r);

for (r_end = r + Z_STRLEN_P(return_value) - 1; r < r_end; ) {
    if (mask[(unsigned char)*r++]) {
        *r = toupper((unsigned char) *r);
    }
}
初始字符串的任何位置都不包含定界字符,但结果完全是大写的


正如在一篇评论中提到的,这里的文档中有一个公开的PHP错误反映了这种行为:

抱歉,但这个问题毫无意义……函数名是ucwords(),定义为:大写:字符串中每个单词的第一个字符。为什么它不应该做它想做的事情?@zioMitch,因为文档将“单词”定义为紧跟在delimiters参数中列出的任何字符之后的任何字符串,这里给出的分隔符是x。这是一个有效的问题。第一个字符总是大写的。您只能使用分隔符来更改字符串的拆分,以确保要大写的字符作为拆分字符串的第一个字符,但您的要求似乎不可能仅通过
ucwords(),所以你不是唯一一个被注意到的人。@treyBake我知道它的用途。我知道还有其他的工具。我只是想更好地理解分隔符,并且正在使用一个示例字符串(我不想制作一个玩家标签生成器)。
php > echo ucwords('aaa', 'A');
AAA