每个单词大写并支持多字节

问题描述 投票:0回答:5

我想将所有单词的第一个字符替换为大写。我可以用 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 转换为大写字符。

php regex preg-replace title-case multibyte-characters
5个回答
4
投票

ucwords()
是针对此特定问题的内置函数。您必须设置自己的分隔符作为其第二个参数:

echo ucwords(strtolower($string), '\',. ');

输出:

This Is The, Sample Text.For Replace The Each Words In, This'Text Sample' Words


2
投票

为此使用

mb_convert_case
和第二个参数
MB_CASE_TITLE


2
投票

您可以简单地使用

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);

演示


1
投票

不擅长正则表达式,因此创建了 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;
}
?>

0
投票

这里是取自 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 演示

© www.soinside.com 2019 - 2024. All rights reserved.