PHP-MySQL ékezetes karakterek nem íródnak be a táblába
Kórtörténet: Localhoston fut minden,a php file utf-8 a mysql utf-8 mysql ini file-ban a beállítás mindenen utf-8,a post-on átküldött adatok kapcsolódás előtt kiíratva még ékezetesek.Az ékezet nélküli karakterek beíródnak a táblába és ki is olvashatóak,az ékezetes karakterek meg sem jelennek és az utánuk kővetkezők karakterek sem.Ha a mysql commandon viszem be az adatokat a táblába a helyzet ugyan ez.Ha viszont oda vissza konvertálom a karaktereket iconvval akkor minden hibátlan,de még a keresett kifejezést is át kell fordítanom.Arra kéne nekem ötlet hogy tudom kihagyni a folyamatból az oda vissza konvertálást.
■ <?php
$urlcim = $_POST['urlcim'];
$cim = $_POST['cim'];
$eloado = $_POST['eloado'];
$szerzo = $_POST['szerzo'];
$ar = $_POST['ar'];
if (!$urlcim || !$cim || !$eloado || !$szerzo || !$ar) {
echo "Nem minden adatot adott meg.<br />"."Kérjük, próbálja meg újra!";
exit;
}
$cim = iconv("ISO-8859-2", "UTF-8", $cim);
$eloado = iconv("ISO-8859-2", "UTF-8", $eloado);
$szerzo = iconv("ISO-8859-2", "UTF-8", $szerzo);
if (!get_magic_quotes_gpc()) {
$urlcim = addslashes($urlcim);
$cim = addslashes($cim);
$eloado = addslashes($eloado);
$szerzo = addslashes($szerzo);
$ar = doubleval($ar);
}
$adatbazis = new mysqli('localhost', 'zenekodb', 'zenek0000', 'zenek');
if (mysqli_connect_errno()) {
echo "Hiba: Nem sikerült kapcsolódni az adatbázishoz. Kérjük, próbálkozzon később.";
exit;
}
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
mysql_query("SET COLLATION_CONNECTION='utf8_general_ci'");
mysql_query("SET character_set_results = 'utf8'");
mysql_query("SET character_set_server = 'utf8'");
mysql_query("SET character_set_client = 'utf8'");
$lekerdezes = "INSERT INTO dalok VALUES('".$urlcim."', '".$cim."', '".$eloado."', '".$szerzo."','".$ar."')";
$talalat = $adatbazis->query($lekerdezes);
if ($talalat) {
echo $adatbazis->affected_rows." db dal hozzá lett adva az adatbázishoz.";
} else {
echo "Hiba történt. A daltt nem sikerült hozzáadni.";
}
$adatbazis->close();
?>
Kiolvasáskor pedig csak igy jelenik meg normálisan
Legközelebb kérlek eleve PHP
szia
[colorer=php\]Kódod[/colorer]
köszönöm
Ha a táblaszerkezet esetleg
A táblát is elkészítettem
Azt nem értem hogy miért kell átkonvertálni a php változókat latin2 ről utf-8 ra hogy mysql felismerje az ékezeteket,mikor elvileg utf-8 ban van.ha átküldöm a php bol flash be "az alapban csak utf-8 at ismer" ott megvannak az ékezetek,ha kiíratom echo-val vagy print-el php ban a változókat az is ékezetes.Ha az alábbi módon használom az iconv-ot az azt jelenti hogy latin2 ről konvertál utf-8 ra?
de ha ugyan ebbe a táblába mysql commandal töltöm az adatokat txt file-ból ugy sem irja be az ékezeteket,a txt file utf8,hogy tudom kiíratni a php vel hogy milyen a futó carset kódolása? viszont ha a táblából olvasok és nem fordítom vissza az adatokat akkor
minden féle furcsa ékezetes karakterek jönnek.mint ha a php nem lenne utf8.
a php ini file default carset latin1,de átirhatom bármire és újra indíthatok a helyzeten nem változtat.Ez úgysem sem lenne megoldás mert hálós szerver ini file-ját nem írhatom át.
mysql != mysqli és mysqli::set_charset
Ha mysqli-t használsz, akkor a "SET NAMES utf8" helyett a doksi szerint inkább mysqli::set_charset-et kéne.
Továbbá, ha a bejövő adatokat ISO-8859-2-ból UTF8-ra konvertálod tároláskor, majd kiíratáskor fordítva, és jól jelenik meg a böngészőben, akkor hiába UTF8 a php fájlod, a kiküldött html-t a böngésző ISO-8859-2-nek látja (ha nem annak látná, nem lenne jó az iconv-s konvertálás, vagy nem lenne rá szükség). Megfelelő Content-type headert küld a szerver (vagy te php-ból)? A vonatkozó meta tag szerepel az oldalon?
A sima mysql fuggvényeket
vagy ezt is"<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">"
eredménytelenül.
Abban biztos igazad van hogy ha át kell fordítani akkor latin2 van,azt is értem hogy a böngésző látja másnak,de nem tudom miért.Azt viszont nem értem hogy ha közvetlenül viszek adatot a táblába utf8 ast akkor miért nem íródnak be az ékezetesek hisz nincs böngésző ami megváltoztassa a txt file kódolását
Parancssori bevitelnél lehet
Pontosan milyen paranccsal, milyen környezetben próbálod a parancssort?
A szerver ini je latin1 a
a szerver windows alat fut localhoston apache 2.2.8
php 5.5.6
mysql 5.0.51b
phpMyAdmin Database Menager 2.10.3
a mysql command ezekkel települt,mélyebben nem ismerem nem régóta ismerkedem a mysql el
amint az a sok kérdésem mutatja.
De az biztos hogy valami kódolási zűrzavar van.
Az utf8 bom nélkül vagy bom-al kell ha notepad++ ban mentem a file-t?
A mysql commandon ez a
USE zenek;
INSERT INTO dalok VALUES
("aaaaaa.mp3", "áááááá", "őőőőőőő", "űűűűűű", 900 ),
("bbbbbb.mp3", "óóóóóó", "ééééééé", "öööööö", 800 );
Akkor próbáld így: USE
mysql --help
mysql --help
parancs kimenetében a következő résznél:mysql --print-defaults
kimenetében pedig valahol benne kéne lennie a használt character setnek (igaz, a helpben is benne van ez az info).köszi. megnézem,de most
azért a parancssoros help et megnézem.
BOM nélkül
A hiba oka számomra kideríthetetlen
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
Ezt a választ a mysql command line client adta
ha ezzel viszem be az adatokat txt file-bol :query ok,2 rows affected, 6 warnings
ha billentyűzeten begépelem ugyan ez a válasz és az eredmény is, az ékezetes betűk helye üresen marad a sorokban.Abban az esetben ha átállítom a carset-et SET NAMES latin1 vagy latin2 akkor latin1 nél pár helyre tesz valamilyen furcsa ékezetes karaktert latin2 nél ha jól emlékszem csak az űűűű jelenik meg.
A tábla caracter lekérdezésére a válasz utf8,de a bevitelkor sehogy nem ír be ékezetet
Megtaláltam a megoldást a konvertálás mellőzésére
Escape
mysql_real_escape_string
fv-t használod.A latin2-re meg kéne találni a választ, ha minden utf-8 lenne, akkor nem kellene. Vissza kéne nézned pl.
ini_get
-el az aktuális beállításokat, de most fejből nem tudok konkrétumokat. Illetve csinálhatnál a fájlon belül is egy változót$valami='Árvíztűrő...';
, aztánecho mb_detect_encoding($valami, "auto");
sorral kiírathatod ennek a kódolását, hátha a post-tal jött adatok a latin2-esek csak, vagy valamiért a fájlod / PHP kódolása nem jó.Mindenképp a detektálást javaslom az állítgatás helyett: előbb derítsd ki, mi nem jó.
Escapelésre a
mysql_real_escape_string
használata nem javasolt (sőt, az egészmysql
modul használata sem).Helyette ott van pl. a
mysqli
, ami támogatja a paraméteres lekérdezéseket, ami biztosítja a biztonságos SQL végrehajtást.Szia pepita
Olvastam valahol hogy te nem nagyon élteted a flash-t.Csináltam pár flash es dolgot
és érdekelne hogy mivel tudnék hasonló dolgokat létrehozni ami nem flash.
A HTML-5 ben gondolkodtam de sokan már az előtt temetni kezdték mielőtt kiforrta volna magát.Ilyesmikre gondolokhttp://www.bolygofoto.atw.hu
A CSS-hez annyit értek hogy stíluslapot hozzak létre benne XML nek vagy Flash AS3 nak,de láttam már flash mentes szép animációkat is,csak már nem tudom hol és hogy mivel születtek.
Azt hiszem a linket nem jól
www.bolygofoto.atw.hu
vagy
www.blackbullpizza.uw.hu
Szóval valami ilyesmi mozgásokat miben lehet jól megvalósítani,és az sem árt ha androidon vagy más mobilon is megjelenik.
Új téma
A karakterkódolásra sajna nincs több ötletem.
Jobb
addslashes
-nél még mindig jobb. Következő (egyszerű) lépés. A mySql is támogatja a paraméteres lekérdezéseket, csak nem véd helyetted, ami sokszor nem is baj.