我想将所有单词的第一个字符替换为大写。我可以用 ucwords 来做到这一点,但它不是 unicode 编码。我还需要设置分隔符。
this is the, sample text.for replace the each words in, this'text sample' words
我希望将此文本转换为
This İs The, Sample Text.For Replace The Each Words İn, This'Text Sample' Words
逗号后,点后,空格后,逗号后(非空格),点后(非空格)
如何使用 utf-8 转换为大写字符。
ucwords()
是针对此特定问题的内置函数。您必须设置自己的分隔符作为其第二个参数:
echo ucwords(strtolower($string), '\',. ');
输出:
This Is The, Sample Text.For Replace The Each Words In, This'Text Sample' Words
为此使用
mb_convert_case
和第二个参数 MB_CASE_TITLE
。
preg_replace_callback
就像 as
$str = "this is the, sample text.for replace the each words in, this'text sample' words";
echo preg_replace_callback('/(\w+)/',function($m){
return ucfirst($m[0]);
},$str);
不擅长正则表达式,因此创建了 php 函数来执行您想要的操作,如果您想添加更多字符,您可以简单地编辑此函数..
<?php
$str = "this is the, sample text.for replace the each words in, this'text sample' words";
echo toUpper($str);//This Is The, Sample Text.For Replace The Each Words In, This'Text Sample' Words
function toUpper($str)
{
for($i=0;$i<strlen($str)-1;$i++)
{
if($i==0){
$str[$i]=strtoupper($str[$i]."");
}
else if($str[$i]=='.'||$str[$i]==' '||$str[$i]==','||$str[$i]=="'")
{
$str[$i+1]=strtoupper($str[$i+1]."");
}
}
return $str;
}
?>
这里是取自 PHP 文档 smieat 的评论的代码。它应该与土耳其语点线 I 一起使用,并且您可以稍后在支持功能中添加更多此类字母:
function strtolowertr($metin){
return mb_convert_case(str_replace('I','ı',$metin), MB_CASE_LOWER, "UTF-8");
}
function strtouppertr($metin){
return mb_convert_case(str_replace('i','İ',$metin), MB_CASE_UPPER, "UTF-8");
}
function ucfirsttr($metin) {
$metin = in_array(crc32($metin[0]),array(1309403428, -797999993, 957143474)) ? array(strtouppertr(substr($metin,0,2)),substr($metin,2)) : array(strtouppertr($metin[0]),substr($metin,1));
return $metin[0].$metin[1];
}
$s = "this is the, sample text.for replace the each words in, this'text sample' words";
echo preg_replace_callback('~\b\w+~u', function ($m) { return ucfirsttr($m[0]); }, $s);
// => This İs The, Sample Text.For Replace The Each Words İn, This'Text Sample' Words
参见 IDEONE 演示