htmlentites-el mi a gond?
Sziasztok!
Szóval egy adott oldalon, a szokásos problémákat elkerülendő, a tinyMCE szerkesztőből érkező adatokban levő éáőúű stb.., tehát magyar karaktereket átkonvertálom html entitásokra, és így is tárolom az egyébként UTF-8 alapú adatbázisban. Ezenfelül UTF-8 minden más is, as far as i know. Eddig működött is minden, de a nyilvános résznél is át kellett konvertálni a keresőből érkező adatokat, mert kölönben pl. é-t keres ott, ahol é van, és így nincs találat. Az alábbi kód pl. a 'lehetséges' szóra az alábbi megfelelőt adja:Amit én szerettem volna (mellesleg fogalmam sincs miért kell két különböző entitás ugyanarra), az a numerikus verzió, amit ez nem ad vissza, viszont a php manuálban valaki volt kedves egy konvertáló függvényt beírni:Akkor a numerikus-t, vagy a karakteres-t kéne használni? És hogyan kerül képbe az UTF-8? ISO-nál ez eddig nem tűnt fel, az én hibám, hogy nem régóta használok teljes egészében UTF-8-at.
üdvözlettel
BL
■ Szóval egy adott oldalon, a szokásos problémákat elkerülendő, a tinyMCE szerkesztőből érkező adatokban levő éáőúű stb.., tehát magyar karaktereket átkonvertálom html entitásokra, és így is tárolom az egyébként UTF-8 alapú adatbázisban. Ezenfelül UTF-8 minden más is, as far as i know. Eddig működött is minden, de a nyilvános résznél is át kellett konvertálni a keresőből érkező adatokat, mert kölönben pl. é-t keres ott, ahol é van, és így nincs találat. Az alábbi kód pl. a 'lehetséges' szóra az alábbi megfelelőt adja:
$search['value'] = htmlentities($search['value'], ENT_QUOTES, 'UTF-8');
echo htmlspecialchars($search['value']);
//Kiírja lehetséges
function convert($s){
$table1 = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
foreach ($table1 as $k=>$v){
$table1[$k] = "/$v/";
$c = htmlentities($k,ENT_QUOTES,"UTF-8");
$table2[$c] = "&#".ord($k).";";
}
$s = preg_replace($table1,$table2,$s);
return $s;
}
$search['value'] = convert(['value']);
echo htmlspecialchars($search['value']);
//Kiírja hogy lehetséges, és így működik is
üdvözlettel
BL
UTF-8
Ha biztonsági okokból szeretnéd bevitelkor konvertálni a karaktereket, akkor az nem a legjobb megoldás. Igazából nincs is jó megoldás rá, csak framework szinten, ami nincs igazából a PHP-hez.
Egyébbként abban nem bíthatsz, hogy &# lesz az aktuális kódlappal nem megjeleníthető kerakterek kódolása, mert ezt a böngésző csinálja, és ahány böngésző annyi képpen (a Safari pl. nem küld olyan karaktereket, amik nem férnek bele a lap kódolásába, az IE pedig váltogatja a Ӓ és ö stb. formát).
félmegoldás
üdv
BL
Megoldás: entity_encoding:"raw"
Ez nem teljesen igaz. Épp ma futottam én is bele a fenti problémába, és hiába használok az oldalon UTF-8-at az istenért sem úgy küldte a mysql-nek az adatokat, átírta html-entitásokra a tinyMCE az ékezetes karaktereket.
Viszont szerencsére van egy egyszerű megoldás a fenti nyűgre, a tiniMCE beállításainál a következőt kell megadni: