[英]Capitalize the first letter of sentences in paragraphs which are in turkish language
I am trying to create a simple php function to capitalize only the first letter of every sentence in a paragraph. 我正在尝试创建一个简单的php函数,以仅将段落中每个句子的首字母大写。 The code works but I have problems with turkish characters. 该代码有效,但是我遇到了土耳其字符问题。
$string = "YAĞMUR YAĞIYORDU. ŞEMSİYESİNİ ÇIKARDI"; //Example sentence
$string = ucfirst($string);
$string = preg_replace_callback('/[.!?] .*?\w/',
create_function('$matches', 'return strtoupper($matches[0]);'),
$string);
This may work for you 这可能对你有用
$str= "YAĞMUR YAĞIYORDU. ŞEMSİYESİNİ
ÇIKARDI"; //Example sentence
function my_mb_ucfirst($str) {
$fc = mb_strtoupper(mb_substr($str, 0, 1));
return $fc.mb_substr($str, 1);
}
echo my_mb_ucfirst($str);
Edit: 编辑:
function ucfirst_turkish($str) {
$tmp = preg_split("//u", $str, 2,
PREG_SPLIT_NO_EMPTY);
return mb_convert_case(
str_replace("i", "İ", $tmp[0]),
MB_CASE_TITLE, "UTF-8").
$tmp[1];
}
$str= "YAĞMUR YAĞIYORDU. ŞEMSİYESİNİ
ÇIKARDI"; //Example sentence
echo ucfirst($str) ."\n";
echo ucfirst_turkish($str);
NB: If it doesn't work then check some example for Turkish language here http://php.net/manual/en/function.ucfirst.php 注意:如果不起作用,请在此处查看一些土耳其语示例, 网址为http://php.net/manual/zh/function.ucfirst.php
okay, this is hideous, but it works... at least for the string you provided. 好的,这很可怕,但它至少对您提供的字符串有效。
i could not get your preg_match to get that 'ş' after the period no matter how i fiddled, and replacing strtoupper() with mb_convert_case in your original example didn't do the trick either. 无论我如何摆弄,我都无法在周期后获得preg_match来获得“ş”,并且在原始示例中用mb_convert_case替换strtoupper()也不起作用。
so, i've refactored it into a hideous loop over the chars, testing for periods as sentence-enders. 因此,我将其重构为字符上的一个可怕的循环,测试了作为句子提供者的时间段。
<?php
// the string. i've made it lower case here to make the test simpler
$string = "yağmur yağiyordu. şemsiyesini çikardi"; //example sentence
// multibyte-safe splitting of the string into an array of chars. note that php arrays are by default one byte
// so simply accessing $string[3] may not give you the char you think.
$bodyArray = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY);
// us mb_convert_case to get the first char of the sentence. you may wish to do some trimming here to
// confirm that it's not a space..
$bodyArray[0] = mb_convert_case($bodyArray[0],MB_CASE_UPPER);
// the buffer to hold your capitalized string
$buffer = "";
// each char
for($i=0;$i<count($bodyArray);$i++) {
// if previous char was a period and the current char is not a space, uppercase the char
if($ucflag && $bodyArray[$i] != " ") {
$bodyArray[$i] = mb_convert_case($bodyArray[$i],MB_CASE_UPPER);
$ucflag = false;
}
// if this char is a period, set a flag to uppercase the next non-space char
if($bodyArray[$i] == ".") {
$ucflag = true;
}
// add the char to the buffer
$buffer .= $bodyArray[$i];
}
print $buffer;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.