Nahrazení více mezer v textu jednou mezerou

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
joseff
Člen | 233
+
0
-

Zdravím, snažím se o vcelku jednoduchou věc: odstranění mezery v textu (nahradit více mezer v textu za jednu a odstranit řádkování, tabulátory …), vyhledal jsem si pár postupů, přičemž nejlepší mi přišel tento:

preg_replace("/[[:blank:]]+/"," ",$input);

Nicméně pokaždé když to udělám tak mi to do textu nahází spoustu těchto znaků:

Zkoušel jsem místo výše zmíněné funce toto:

Strings::replace($input, "/[[:blank:]]+/", ' ');

Ale výsledek byl stejný, taktéž jsem předtím zavolal:

Strings::fixEncoding($input);

A zkoušel jsem i toto:

Strings::normalize($intro);

žádná změna, data tahám z databáze. Neví někdo jak na to?

llook
Člen | 407
+
0
-

Jestli používáš UTF-8, tak je dobré používat volbu „u“:

preg_replace("/[[:blank:]]+/u"," ",$input);

Jinak to předpokládá single-byte encoding a může ti to rozbourat vícebytové znaky, jmenovitě „Š“.

joseff
Člen | 233
+
0
-

Hele paráda, děkuji moc, funguje to na jedničku s hvězdičkou!

Paradiso
Člen | 101
+
0
-

na to je přímo funkce trim()
aby jsme se drželi alespoň trošku nette, tak v šabloně je možno použít:

{$title|trim}

Editoval Paradiso (11. 2. 2012 4:05)

duke
Člen | 650
+
0
-

@Paradiso Otázka mj. zněla, jak nahradit více mezer v textu za jednu. Funkce trim odstraňuje whitespace jen z počátku a konce řetězce.

Paradiso
Člen | 101
+
0
-

jej, tak to se omlouvám, hlavně, že dávám odkaz na dokumentaci: This function returns a string with whitespace stripped from the beginning and end of str. Člověk by neměl radit, když přijde posilněn domu, to je pak moc chytrej. :-)