Премахване на двойни шпации преди запис на пост във WP

Torbalan Trolski

Well-Known Member
Edit 3:
Подкарах го с този код.
PHP:
function gory_remove_double_spaces_on_save( $content ) {
	return preg_replace('/[\p{Z}]{2,}/u', " ", $content );	
}
add_filter( 'content_save_pre', 'gory_remove_double_spaces_on_save', 10, 1 );

Ако искате слагайте във functions.php или свалете плъгинче ot GitHub

---------------------------------------------------------------------------------------------------------------------------------------------
Тази гад ме мъчи вече час.

Закачам се за
PHP:
add_filter( 'content_save_pre', 'gory_remove_double_spaces_on_save', 10, 1 );
function gory_remove_double_spaces_on_save( $content ) {
		return preg_replace("/[[:blank:]]+/", " ", $content );
}

Филтъра работи коректно, ако сложа
PHP:
return '*' . $content;
PHP:
"/\s\s+/"
"/\s\s+/u"
"/[[:blank:]]+/"
"/[[:blank:]]+/u"
regexp-овете сами за себе си също работят и като сглобя функцията прави каквото си иска. Мъчих ги и с и без unicode modifier-и и все тая.

дори дърводелският вариант
PHP:
str_replace( "  ", " ", $content );
отказва да сработи.

Edit:
Всъщност на тестови сървър с PHP 5.4.20 си работи, а на впс-а с PHP 5.3.3 прави магарии.

Edit 2:
Още по-забавно взе да става.
В PHP 5.3.3 cli работи, а във WP не.
 
Последно редактирано:
Последно редактирано:
От: Re: Премахване на двойни шпации преди запис на пост във WP

Това стандартния тесктови редактор ли е, защото на мен ми правеше нещо подобно с tinymce плъгина. И все още е така, но за междуредие.
Не е. PHP. Закачам филтъра преди запис в БД. TinyMCE plugin за това не ми се пише. Не че е голяма философия.
 
От: Премахване на двойни шпации преди запис на пост във WP

Case closed. Виж 1-я пост.
Ако на някой му трябва плъгинче може да го ползва :D
 
Re: От: Re: Премахване на двойни шпации преди запис на пост във WP

Не е. PHP. Закачам филтъра преди запис в БД. TinyMCE plugin за това не ми се пише. Не че е голяма философия.

Да, този плъгин, уж адванс, ама и той греда. Хахаха, готина команда. :) Добре ти ги говорят отгоре. :)
 
От: Премахване на двойни шпации преди запис на пост във WP

пробвай:

return preg_replace('/[\p{Z}\s]{2,}/u', ' ', $content);
 
От: Премахване на двойни шпации преди запис на пост във WP

пробвай:

return preg_replace('/[\p{Z}\s]{2,}/u', ' ', $content);
Пробвано е преди час маха и форматирането освен шпациите


Case closed. Виж 1-я пост.
Ако на някой му трябва плъгинче може да го ползва :D
 
От: Премахване на двойни шпации преди запис на пост във WP

а честито :)

хмм що \s ще маха форматирането? както и да е - оправил си се :D
 
От: Премахване на двойни шпации преди запис на пост във WP

а честито :)

хмм що \s ще маха форматирането? както и да е - оправил си се :D
щото means whitespace(space, tab or newline)
 
От: Премахване на двойни шпации преди запис на пост във WP

При мен си работи и с това:
PHP:
return preg_replace('@\s{2,}@u', ' ', $content );
 
От: Премахване на двойни шпации преди запис на пост във WP

Ако лично на мен ми трябваше подобна функционалност бих се спрял на възможно най-съкратения вариант:

PHP:
preg_replace('/\h{2,}/', ' ', $content)

Бърза справка с единственият достоверен източник за regex, показва също, че ако се използва решението открито в първи пост би трябвало да е малко по-разширено:

PHP:
preg_replace('/[\p{Zs}\t]{2,}/u', ' ', $content)
 
От: Премахване на двойни шпации преди запис на пост във WP

Ако трябва да се максимално коректни с условието, би трябвало да се използва:
PHP:
preg_replace('@\x20{2,}@u', " ", $content);
Което ще замени само двойните шпации, без това да промени табулациите (в случай, че трябва да се запазят, заради <pre> или flat-text-formating).
По-странното в случай е, че филтъра на WP се държи малко идиотски, защото обработва избирателно регулярните изрази.
 
От: Премахване на двойни шпации преди запис на пост във WP

Както споменах в предишните постове, проблема беше в това, че абсолютно работещи regexp-ове (без да коментирам дали са елегантни или не) не бачкаха именно във филтъра. Пуснати през php-cli на същия сървър работеха.
На php 5.4 пък си работеха и във WP.
Така, че се спрях на първия вариант, който тръгна.

Лично на мен този вариант най-много ми допадаше, но уви на php 5.3 отказа да работи.
PHP:
"/[[:blank:]]+/u"
 
От: Премахване на двойни шпации преди запис на пост във WP

Вчера нямах време да го коментирам това, но днес ще си вметна моите 5 ст.
Относно "мързеливите" варианти ... После се оплакваме, че има писмо от хостинга, защото сме си изяли CPU-то.
Мързела се е закачил на the_content, а пък аз щото съм по-прост на content_save_pre :D

И сега си представи 1М импресии месечно, всеки път да се вика този филтър. А по моя начин да кажем си качил 100 поста за месеца извикан е да кажем 500 пъти (заради аутосейва). И си представи още 10-20 такива плъгина, които уж нищо не товарят, ама като умножиш броя на излишните извиквания по един солиден брой импресии и изведнъж хостинга ти казва "Я баце мини на дебелия план".

От такива елементарни дребни неща започват легендите колко е тежък даден CMS и как яде ресурси. Аз лично като кача нов плъгин поне набързо му преглеждам сорса и задължително го тествам в DEBUG mode с пуснати абсолютно всички съобщения.
 
От: Премахване на двойни шпации преди запис на пост във WP

Вчера нямах време да го коментирам това, но днес ще си вметна моите 5 ст.

Относно "мързеливите" варианти ... После се оплакваме, че има писмо от хостинга, защото сме си изяли CPU-то.
Мързела се е закачил на the_content, а пък аз щото съм по-прост на content_save_pre :D

И сега си представи 1М импресии месечно, всеки път да се вика този филтър. А по моя начин да кажем си качил 100 поста за месеца извикан е да кажем 500 пъти (заради аутосейва). И си представи още 10-20 такива плъгина, които уж нищо не товарят, ама като умножиш броя на излишните извиквания по един солиден брой импресии и изведнъж хостинга ти казва "Я баце мини на дебелия план".

От такива елементарни дребни неща започват легендите колко е тежък даден CMS и как яде ресурси. Аз лично като кача нов плъгин поне набързо му преглеждам сорса и задължително го тествам в DEBUG mode с пуснати абсолютно всички съобщения.

напълно подкрепям - мисълта ми беше да му ползваш сорса - търсеше решение

пс - пълна тъпотия е да се закача към контента
 

Горе