Autor Zpráva
blah
Profil *
proč se mi funkce htmlspecialchars() vrací například podivné hodnoty?

Například zadám-li htmlspecialchars(ã) vrátí mi to ã místo ã

Co to je za bordel?
Joker
Profil
A není to ã čistě náhodou zapsané jeko "&227;"?
blah
Profil *
nene, tohle je přesně zkopírovaný výstup: ã
blah
Profil *
jenže aby se zobrazilo korektne zase zpátky ã, tak musí být ten výstup
ã
blah
Profil *
sakra... vždycky se mi to změní na ten znak :D "&227;" Tohle má být ten výstup
Joker
Profil
Jasně, výstup jo, ale není vstup čistě náhodou "&227;" (což je HTML entita písmena ã)? Myslím, že čistě náhodou je.
blah
Profil *
Joker: no, mám to takhle:

Formulář, kam se zadá název a kde se můžou vyskytnout i tyto znaky.

Data z formuláře se ukládají do databáze a jsou proháněna přes tuto funkci... Jenže když je znovu potřebuju zobrazit, tak mi to zobrazuje ten špatnej znak :(
Kalda
Profil *
To, co ukazuješ odpovídá tomu, jako kdyby se na ten znak aplikovala funkce htmlspecialchars 2x
Tj. neděláš např. to, že to do DB vložíš jednou spolu s htmlspecialchars, a pak při výpisu opět na data použiješ htmlspecialchars???
blah
Profil *
Kalda: to m2 takz napadlo, ale je to blbost, protože ã tohle se uloží do databáze.

ten řetězec je konkrétně prohnanej tímto:


$GLOBALS['text']=mysql_escape_string($_POST['text']);

$GLOBALS['text']=htmlspecialchars($_POST['text']);
blah
Profil *
...když odmažu
$GLOBALS['text']=mysql_escape_string($_POST['text']);
tak to funguje, nevím ale, jestli je moudrý mysql_escape_string vyřadit...
Joker
Profil
Kalda
Ta funkce se IMHO neaplikuje dvakrát. Prostě někdo do formuláře zadá "ã". Při posílání na server se to uloží jako "ã" a htmlspecialchars to pak převede na ã
blah
Profil *
Joker: ale proč potom při odmazání
$GLOBALS['text']=mysql_escape_string($_POST['text']);

všechno funguje?
Joker
Profil
blah
No to by mě taky zajímalo. mysql_escape_string by mělo nahrazovat znaky: NUL, LF, CR, EOF, ", ' a (tj. nulový znak, konec řádku, konec souboru, uvozovky a zpětné lomítko). Nějak nevidím souvislost.
blah
Profil *
Joker: no právě, taky mi to hlava nebere
blah
Profil *
no nic... kždopádně se budu držet pravidla, že htmlspecialchars() se používá až při vypisování na stránku a ne při vkládání do DB... Chtěl jsem si tak usnadnit práci a asi to nepůjde...
Kalda
Profil *
K mysql_escape_string:
mysql_escape_string je depricated funkce, používej raději mysql_real_escape_string
Navíc bych doporučoval použít mysql_real_escape_string až jako poslední funkci - spíš je to jen otázka zvyku, aby se Ti nestalo, že následné funkce ještě nevhodně modifikují řetězec před uložením do DB.

Ale teď k Tvému problému - vůbec nevidím souvislost, proč Ti to dělá. Napadá mě ještě jedna věc - nepoužíváš nějaký editor (např. FCK)? Ty totiž občas převádějí tyto znaky na entity.
blah
Profil *
Kalda: nene, bylo to čistě přes formulář (žádný FCK editor nebo podobné věci)...

Jinak používám mysql_real_escape_string, jen se mi to na to testování nechtělo vypisovat :)
Toto téma je uzamčeno. Odpověď nelze zaslat.