0

記号または文字の後の最初の文字を大文字にしようとすると問題が発生し、実際にはうまく機能しますが、文字列の単語間にスペースがある場合、コードは大文字を無視してそのまま印刷します。たとえば、次のようになります。

$string = "•TEXT";

$string = ucfirst(strtolower($string));

$string = preg_replace_callback('/[.!?].*?\w/', create_function('$matches', 'return strtoupper($matches[0]);'),$string);

$string = preg_replace('/^•([a-z])([a-z]+)$/e', '"•" . strtoupper("\\1") . "\2"', $string);

echo $string; //This print •Text 

上記の例はテキストを正しく表示していますが、これにはスペースがありません。次のコードのようにスペースがある場合、すべてのテキストが小文字で表示されます。例:

$string = "•TEXT EXAMPLE";

$string = ucfirst(strtolower($string));

$string = preg_replace_callback('/[.!?].*?\w/', create_function('$matches', 'return strtoupper($matches[0]);'),$string);

$string = preg_replace('/^•([a-z])([a-z]+)$/e', '"•" . strtoupper("\\1") . "\2"', $string);

echo $string; //This print •text example (This is my problem, all is lowercased)

これで私を助けてもらえますか?

4

1 に答える 1

0

より簡単な解決策はどうですか:

$str = '•TEXT EXAMPLE';
if (preg_match('/(^&[^;]+;)(.*)/', $str, $matches)) {
    list($discard, $entity, $text) = $matches;
    // list(, $entity, $text) = $matches; // this works too
    $string = $entity . trim(ucfirst(strtolower($text)));
    echo $string;
} else {
    # Match attempt failed
}
于 2013-06-27T23:07:03.797 に答える