@Seovtop

Что исправить в скрипте?

Плагин в ворпресс заменяет первую букву в предложении на заглавную.
Но регулярное выражение работает таким образом, что верстке текста также исправляет и url картинки. Например, http://domain. Com/pict/image. Jpg
Подскажите, пожалуйста, что дописать в регулярном выражении, чтобы исключить исправление в url адресах?
*/
###################################################################################
defined( 'ABSPATH' ) or die();

function TCR_CL_replace_content($content)
{
$content=preg_replace_callback( '|(?:\.)(?:\s*)(\w{1})|Ui',create_function('$matches', 'return ". ".strtoupper($matches[1]);'),ucfirst($content)); 
return $content;
}
add_filter('the_content','TCR_CL_replace_content');

###################################################################################

?>
  • Вопрос задан
  • 2268 просмотров
Решения вопроса 1
@sdo
Понимаю, что изврат, но как рак на безрыбье..
Рег честно стырен с просторов интернета, рекомендую в нем подкрутить обязательность протокола http:// и еще не начинать статей со ссылок - ucfirst честно сделает Вам Http://
function TCR_CL_replace_content($content)
{
	$regex = "/(\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|])/i";
	$content=preg_replace_callback( $regex , function($m){return str_replace('.',chr(0),$m[1]);} , $content);
	$content=preg_replace_callback( '|(?:\.)(?:\s*)(\w{1})|Ui'
		,function($matches){ return ". ".strtoupper($matches[1]);}
		,ucfirst($content)
		); 
	$content= str_replace(chr(0),'.',$content);
	return $content;
}


Считаю необходимым дополнить один момент. Надо учитывать кодировку исходного текста. Для utf8 например, скрипт будет работать некорректно. Для работы с utf-8 необходимо будет добавить модификатор u в вашу регулярку, добавить mb_internal_encoding и заменить strtoupper на mb_strtoupper. Также следует вычислять символ для временной подстановки динамически, на основании факта что его нет в исходном контенте.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы