Autor | Zpráva | ||
---|---|---|---|
Pavel Straka Profil |
#1 · Zasláno: 20. 10. 2012, 15:56:01
Dobré odpoledne, chtěl bych poprosit o radu zkušenějších.
Z databáze načítám pomocí MySQL_Fetch_Assoc určitý text a chci jej, pokud je delší než 100 znaků oříznout (a přidat 3 tečky). Problém je v tom, že text se "neořízne" po 100 znacích, ale po menším počtu. Předpokládám, že je to nějaký problém s kódováním, např. že "á", není počítáno jako jeden, ale jako více znaků. Existuje způsob, jak se tomuto vyhnout? Děkuji za ochotu pomoci. if (mb_strlen(strip_tags($a["text"]),"UTF-8") > 100) $tecky = "..."; $upr_text = mb_substr(strip_tags($a["text"]),0,100).$tecky; |
||
Alphard Profil |
#2 · Zasláno: 20. 10. 2012, 16:24:55
Je v tom "menším počtu" nějaké pravidlo? Jak se určuje kontrolní počet, nepřehlíží se třeba nějaké bílé znaky?
|
||
Tori Profil |
#3 · Zasláno: 20. 10. 2012, 16:26:20
U mb_substr bych raději taky definovala kódování řetězce, a použila spíš postup:
1. odstranění tagů 2. odstranění nadbytečných mezer, tabulátorů, zalomení řádku apod. 3. teď teprve oříznout na x znaků a případně doplnit výpustku. |
||
Pavel Straka Profil |
#4 · Zasláno: 20. 10. 2012, 20:35:46
Alphard: Žádné pravidlo jsem nevypozoroval.
Z textu: "Hlásíme první dvacítku pěkných garáží po celé ČR! Zejména přibyly pronájmy garáží v Praze, Ostravě a Ústí nad Labem." vznikne "Hlásíme první dvacítku pěkných garáží po celé" (46 znaků). Z textu: "Tak a konečně jsme připojili k Facebooku, kde Vás budeme průběžně zpravovat o novinkách na webu, zajímavostech či žhavých nabídkách." vznikne "Tak a konečně jsme připojili k Facebooku, kde Vás budeme průběžně zpravovat o novinkác" (87 znaků). Tori: Ani když jsem skript upravil tak, jak říkáš, nedošlo k žádné změně. |
||
DJ Miky Profil |
Můžeš poslat ten upravený skript? Když doplníš kódování i do mb_substr, tak tvůj výše uvedený skript funguje také:
<?php $a = array( 'text' => 'Hlásíme první dvacítku pěkných garáží po celé ČR! Zejména přibyly pronájmy garáží v Praze, Ostravě a Ústí nad Labem.' ); if (mb_strlen(strip_tags($a["text"]),"UTF-8") > 100) $tecky = "..."; $upr_text = mb_substr(strip_tags($a["text"]),0,100, 'UTF-8').$tecky; echo $upr_text; // Hlásíme první dvacítku pěkných garáží po celé ČR! Zejména přibyly pronájmy garáží v Praze, Ostravě a... echo mb_strlen($upr_text, 'UTF-8'); // 103 ?> |
||
Pavel Straka Profil |
#6 · Zasláno: 20. 10. 2012, 21:08:45 · Upravil/a: Pavel Straka
Přišel jsem už na to, v čem je kámen úrazu. Pokud místo $a["text"] zadám např. proměnnou $text = 'Hlásíme první dvacítku pěkných garáží po celé ČR! Zejména přibyly pronájmy garáží v Praze, Ostravě a Ústí nad Labem.', funguje vše ok, tak jak píše DJ Miky.
Problém tedy bude někde při výběru z databáze, pomůže někomu tato indicie nasměrovat mě k vyřešení problému? Děkuji. Beru zpět, problém bude v tom, že v "textu" jsou uloženy HTML tagy. Měl jsem ale za to, že právě funkce strip_tags toto vyřeší. Takto tedy vypadá vstupní text: <p><strong>Hlásíme první dvacítku pěkných garáží po celé ČR! Zejména přibyly pronájmy garáží v Praze, Ostravě a Ústí nad Labem.</strong></p> Je generovaný editorem TinyMCE. Jakou funkci mám ještě případně použít, abych měl jistotu, že jde o 100 "skutečných" znaků ? |
||
Tori Profil |
#7 · Zasláno: 20. 10. 2012, 21:18:15 · Upravil/a: Tori
Pavel Straka:
Zjistěte, co vrací funkce mb_internal_encoding. Pokud je to cokoli jiného než utf-8, je problém v nezadaném kódování u mb_substr. (U mě to takto fungovalo, výchozí kódování bylo ISO-8859-1). Pokud to není tím, zkontrolovala bych, jestli je správně nastavené kódování pro připojení k databázi, tedy jestli opravdu vrací data v utf-8. Aha takhle. Buď před zkrácením text dekódovat, anebo ho do databáze ukládat bez entit. Osobně jsem spíš pro druhou variantu z důvodu menší závislosti dat na způsobu zobrazení, ale to je jen můj subjektivní názor. |
||
Pavel Straka Profil |
#8 · Zasláno: 20. 10. 2012, 22:06:06 · Upravil/a: Pavel Straka
Ano, taky by se mi líbila druhá varianta. Jak, prosím, bezpečně převedu entity na "znaky"?
Mám na mysli před uložením do databáze. |
||
Tori Profil |
#9 · Zasláno: 20. 10. 2012, 22:17:01
|
||
Pavel Straka Profil |
#10 · Zasláno: 20. 10. 2012, 22:33:58
Výborně, děkuju za pomoc.
|
||
Časová prodleva: 12 let
|
0