

Replace za multibyte znaky
Zdravím, potřebuju nahradit část textu za mb znaky, zkoušel jsem všemožné fce co jsem našel na googlu (mb_str_replace, mb_replace...) - bez výsledku.
Př.:
$text = str_replace("š","š",$text);
$text = str_replace("á","á",$text);
$text = str_replace("ý","ý",$text);
$text = str_replace("ž","ž",$text);
$text = str_replace("ì","ě",$text);
$text = str_replace("é","é",$text);
$text = str_replace("í","í",$text);
$text = str_replace("ø","ř",$text);
$text = str_replace("è","č",$text);
$text = str_replace("ù","ú",$text);
$text = str_replace("�","",$text); // Tohle ale funguje
Děkuji
Co chces nahradit cim? V jakom kodovanie je originalny text?
&#cislo neni ziaden multibyte character ale escape sekvencia. To je rozdiel jak jablko a motorka.
Kódování je UTF-8.
V textu se zobrazí např. agáta , namísto agáta...
č, š atd... to jsou MB znaky...
si si isty ze zdroj je utf-8 (ta escape sekvencia je single-byte characters) a nie unicode?
Jak presne to nefunguje? Co je na vystupe? Je tam singlebyte č, š atd... v nejakom 1250 kodovani?
Přesněji netuším jaký je zdroj, dostal jsem tento text - zkoušel jsem přes notepad++ překonvertovat do všech možných kódování a nic (UTF-8, ANSI).
Výstup je přesně takový jaký je text...
Jen mě zaráží že ten poslední replace funguje... (ten znak se mi zobrazoval jen jako černý kosočtverec s otazníkem).
PS: Text má kolem 60 000 řádku, moc se mi nechte to ručně přepisovat...
otvor si hexeditor (totalcommander a klavesy F3 a 3) a skontroluj ci su tie escape sekvencie singlebyte
U každého řádku je něco na způsob xxxxxxxx: xx xx xx xx xx xx xx xx | xx xx xx xx xx xx xx xx.
Chytřejší z toho nejsem, ale asi dvoubytové ne?
E: Řekl jsem že mám jen text, a ten chci ho vypsat na stránku....
V php to mám pro to, že tam nechci ty klikiháky - jen v html je to zobrazuje taky...
mas pozerat na tie hexa cisla vedla tych znakov, ty asi moc nemas sajnu co to je kodovanie znakov, co?
Kdyz dam hexadecimalni, ukaze se mi to ve stylu xxx |xx xx xx... | xx xx .... | text, a na dalsim radku znova...
CISLA mas pozerat, ne zamienat si ich s xx. ja viem jak vypada hexeditor nemusis to tu napodobnovat s xx :D
ok ok...
Jinak v tom textu jsou html tagy... ale to nehraje roli ne?...
filer.png
ok to je vsetko singlebyte. este to nascrolluj na nejake to ô alebo ktore ti nefungovalo, ci to je tiez singlebyte vsetko. Pravdepodobne ale je.
Jakym sposobom ten text nacitavas do premennej? Hod sem nejaky zaklad toho PHP kodu, pripadne aj cely
P.S. na vyhladanie toho ô pouzi Ctrl-F. A zaujimave je ze ci sa to v tom original subore vobec vyskytuje taka kombinacia.
resp nie ô ale nejake á alebo co tam ma byt
Celý... říkal jsem že má kolem 65 000 řádků...
Jelikož jde nejspíš o útržek html a jsou tam html taky s " použil jsem syntax
$text =<<<EOD
text
EOD;
E: místo á má být á.
Daj si prehladat original subor (napr. aj v tom totalcommanderi, Ctrl+F) ci sa v nom nachadze vobec sekvencia á
Ptz ked ti ju nezamenil tak sa tam mozno nenachadza a to á ti vznika az v tom PHP
Říkám, mám text ve kterém to je, originální soubor není - resp je ve formátu html a zdrojový kód obsahuje sekvenci á a další...
Toto mi to hodí, když otevřu ten php soubor v hexa, otevřu ještě ten původní v hexa a hodím sem screen
view.php
E: "Původní" html soubor je stejný (v hexa)
No a ved vidis ze tam neni á ale &#225; tak logicky to nenajde á ked v tom subore á neni.
Bud si to budes parsovat po jednotlivych znakoch aby si odchytil vsetky mozne multi-escape sekvecnie, alebo proste skusaj zamienat cely &#225; za to á ci co tam ma byt
Takže:
zkusil jsem str_replace("&#225;","á",$text);
Ve výpise se stále objevuje agáta, v textu je opravdu &#225;
Inac na dekodovanie HTML escape sekvencii je v PHP funkcia http://www.php.net/manual/en/function.html-entity- decode.php
Mam pocit ale z e u teba je to zakodovane dvakrat prvykrat z toho bolo á a po druhom priebehu sa zakoduje ten & za & takze na takto sprzneny subor musis volat decode funkciu dvakrat :)
Ok, já se s tím mořím asi od 3 hodin, opravdu moc děkuji :)