ucwordsは、デフォルトでスペースで区切られた単語の最初の文字のみを大文字にしますが、ハイフン( - )、アンダースコア(_)など、ストリングに他のセパレーターがある場合、 UCWordsはそれを認識しません。
<?php
$title = "my-php_script example";
$formatted = ucwords($title);
echo $formatted; // 出力:My-php_script Example
?>
現時点では、「PHP_Script」はまだ小文字にあり、正しくフォーマットされていません。
方法の回避方法:セパレーターをカスタマイズするか、最初に他のセパレーターをスペースに置き換えてから、処理後に復元できます。
<?php
function ucwords_custom($string, $delimiters = ['-', '_']) {
foreach ($delimiters as $delimiter) {
$string = str_replace($delimiter, ' ', $string);
}
$string = ucwords($string);
foreach ($delimiters as $delimiter) {
$string = str_replace(' ', $delimiter, $string);
}
return $string;
}
echo ucwords_custom("my-php_script example"); // 出力:My-PHP_Script Example
?>
入力文字列が既に部分的または完全に資本化されている場合、 UCWordsを直接使用すると、結果が混乱を引き起こす可能性があります。
<?php
$title = "tHe quick bROWN foX";
$formatted = ucwords($title);
echo $formatted; // 出力:THe Quick BROWN FoX
?>
現時点では、一部の単語はまだ上品および小文字と混合されており、タイトル形式は達成されていません。
回避:最初に文字列をすべての小文字に統合し、次にUCWordsを使用します。
<?php
$title = "tHe quick bROWN foX";
$formatted = ucwords(strtolower($title));
echo $formatted; // 出力:The Quick Brown Fox
?>
UCWordsはプレーンテキストでうまく機能しますが、文字列にHTMLタグまたはURLが含まれている場合、直接呼び出すとタグとリンクが破壊されます。
<?php
$title = 'visit <a href="https://gitbox.net/path">our site</a>';
echo ucwords($title);
// その結果、エラー処理ラベルになります,なる Visit <A Href="Https://Gitbox.Net/Path">Our Site</A>
?>
避けてください:最初にタグを抽出したり、テキストパーツを処理したり、スプライスしたり、URLを保護したりできます。簡単な方法は、HTMLタグをスキップすることです。
<?php
function ucwords_without_tags($text) {
return preg_replace_callback('/([^<>]+)(?=<|$)/', function($matches) {
return ucwords(strtolower($matches[1]));
}, $text);
}
echo ucwords_without_tags('visit <a href="https://gitbox.net/path">our site</a>');
// 出力:Visit <a href="https://gitbox.net/path">Our Site</a>
?>