Заполняйте каждую первую букву слов с помощью preg_replace

Поэтому у меня есть некоторые предложения, которые я вставляю в базу данных с некоторыми процессами автоматической коррекции. Следующее предложение:

$sentence = "Is this dog your's because it can't be mine"; 

И следующий код, чтобы загладить каждое слово, но убедитесь, что он не использует сжатие (например, не):

 str_replace( "'S", "'s", preg_replace( "/(\w+)n'T?/", "$1n't", ( preg_replace( "/\b[az]/e", 'strtoupper("$0")', ucwords($sentence) ) ) ) ); 

При эхо, результат выглядит следующим образом:

 Is This Dog Your's Because It Can't Be Mine 

Это то, что я хочу сделать, однако, что он вводит в мою базу данных MySQL:

 Is This Dog Your's Because It Can'T Be Mine 

Я понятия не имею, почему это происходит … Я предполагаю, что я что-то испортил.

Разумеется, вы должны использовать ucwords() , но так вы бы делали это с регулярным выражением:

 echo preg_replace_callback('/(?<=\s|^)[az]/', function($match) { return strtoupper($match[0]); }, $sentence); 

Он гарантирует, что каждому нижнему регистру предшествует пробел (или начало предложения) с помощью утверждения lookbehind, прежде чем он будет изменен на верхний регистр.

Вы, вероятно, ищете ucwords вместо ( Demo ):

 $sentence = "Is this dog your's because it can't be mine"; echo ucwords($sentence); # Prints "Is This Dog Your's Because It Can't Be Mine"