現在の位置: ホーム> 最新記事一覧> UCWordsを使用してタイトルのフォーマットを実装する場合の一般的な間違いは何ですか?それを避ける方法は?

UCWordsを使用してタイトルのフォーマットを実装する場合の一般的な間違いは何ですか?それを避ける方法は?

gitbox 2025-06-08

2。単語間分離器の多様性を無視します

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
?>

3。一貫性のない症例感度による一貫性のない形式

入力文字列が既に部分的または完全に資本化されている場合、 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
?>

4. HTMLタグまたはURLを使用した文字列の処理中にエラーが発生しました

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>
?>