|
[ Prtinac @ 30.04.2006. 22:38 ] @
| Kada ubacujem cirilicni tekst u bazu preko skripte, on se automatski konvertuje u HTML entities ш ili sta vec. Zasto je to tako i kako to da iskljucim? Kako to da iskljucim na sajtu hostovanom kod provajdera? |
[ glavince @ 01.05.2006. 01:38 ] @
Ako ti je encoding utf8, postavi
mysql_query("set names utf8");
[ Prtinac @ 01.05.2006. 10:05 ] @
Na zalost ni SET NAMES ne funkcionise (probao sam sa nekoliko character sets).
I dalje se unose HTML entities рм itd. umesto cirilicnih slova. Kada na isti nacin (cirilicnom tastaturom) unosim u PhpMyAdmin, sve funkcionise kako treba.
Moja test skripta:
-----------------
<?php
$db = mysql_connect("localhost","root","") or printf(mysql_error());
mysql_select_db("test",$db) or printf(mysql_error());
if (isset($_REQUEST["insertinto"])) {
$q = "insert into test1 values (null,'$_REQUEST[insertinto]')";
$r = mysql_query($q) or printf(mysql_error());
}
?>
<form action="test.php" method="post">
<input type="text" name="insertinto" />
<input type="submit" />
</form>
-----------------
Unosi glupe HTML entities umesto pravih cirilicnih karaktera i zbog toga ne mogu da pretrazujem bazu kako treba. Ni sa set names ne funkcionise.
[Ovu poruku je menjao Prtinac dana 01.05.2006. u 11:16 GMT+1]
[ bzero @ 01.05.2006. 10:40 ] @
Problem je na klijent strani, a ne PHP-u.
Verovatno ti strana na kojoj se nalazi FORM za unos teksta nije utf-8, pa browser automatski pretvara cirilicne karaktere u HTML entities. Stavi na starnu gde je form:
Code:
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
[ Prtinac @ 01.05.2006. 12:31 ] @
Citat: bzero: Problem je na klijent strani, a ne PHP-u.
Verovatno ti strana na kojoj se nalazi FORM za unos teksta nije utf-8, pa browser automatski pretvara cirilicne karaktere u HTML entities. Stavi na starnu gde je form:
Code:
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
Na zalost, ni sa ovim ne funkcionise. Isti slucaj... :-(
[ bzero @ 01.05.2006. 12:57 ] @
Probaj da postavis charset iz PHP-a:
Code:
<?php
header('Content-Type: text/html; charset=UTF-8');
?>
a ako i to ne radi, posalji link do problematicne strane.
[ Prtinac @ 01.05.2006. 13:23 ] @
Sa headerom se u bazu ubacuje nesto ovako...
Åëåìåíò
A skripta mi je inace na lokalnom serveru, ali evo je u potpunosti:
Code:
<?php
header('Content-Type: text/html; charset=UTF-8');
$db = mysql_connect("localhost","root","") or printf(mysql_error());
mysql_select_db("test",$db) or printf(mysql_error());
if (isset($_REQUEST["insertinto"])) {
$q = "insert into test1 values (null,\"$_REQUEST[insertinto]\")";
$r = mysql_query($q) or printf(mysql_error());
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form action="test.php" method="post">
<input type="text" name="insertinto" />
<input type="submit" />
</form>
</body>
</html>
A table u bazi ne moze biti jednostavniji:
Code:
CREATE TABLE `test1` (
`id` int(11) NOT NULL auto_increment,
`tekst` text,
PRIMARY KEY (`id`)
)
[ bzero @ 01.05.2006. 13:28 ] @
Citat:
Sa headerom se u bazu ubacuje nesto ovako...
Åëåìåíò
Pa onda je valjda sad u redu, ne ubacuje vise HTML entites nego "sirovi" utf-8, koliko se secam to je i bio problem?
[ flylord @ 01.05.2006. 14:06 ] @
aj napisi sve relevantne podatke:
1) koji je encoding html strane sa koje unosis podatke
2) daj nam ovde strukturu tabele (izvuci preko phpMyAdmin-a dump tabele)
3) ne bas mnogo relevantno, ali bi bilo dobro da vidimo i phpinfo() izlaz sa tog servera
[ Prtinac @ 01.05.2006. 16:10 ] @
Citat: bzero: Pa onda je valjda sad u redu, ne ubacuje vise HTML entites nego "sirovi" utf-8, koliko se secam to je i bio problem?
Hocu da ubacuje cirilicu. Kao sto ubacuje kad preko polja u PHPMyAdmin unesem cirilicu on je tako unese i u bazu.
[ Prtinac @ 01.05.2006. 16:13 ] @
Citat: flylord: aj napisi sve relevantne podatke:
1) koji je encoding html strane sa koje unosis podatke
2) daj nam ovde strukturu tabele (izvuci preko phpMyAdmin-a dump tabele)
3) ne bas mnogo relevantno, ali bi bilo dobro da vidimo i phpinfo() izlaz sa tog servera
Napisao sam info 1 i 2 u jednoj od prethodnih poruka. Sto se tice phpinfo(), bitno mi je da to funkcionise kako treba na serveru kod EUnet-a (ali nije jos postavljeno), tako da bilo kakvo konfigurisanje PHP-a ili Apache-a ne dolazi u obzir (stari dobri EUnet, samo sto ne moras da im saljes fax sa memorandumom firme da bi ti promenili chmod nekog direktorijuma).
[ bzero @ 01.05.2006. 16:41 ] @
Ne znam sta radi PHPMyAdmin, posto ga ne koristim, ali sustina je u ovome, ako imas HTML stranu, i enkoding te strane je utf-8, kada uneses cirilicu, submituje to, dobices u PHP-u string koji je utf-8 enkodiran. Ako stavis da je enkoding strane windows-1251, posle submitovanja PHP ce dobiti isti taj string, ali windows-1251 enkodiran. Ako je enkoding html strane iso-8859-1, kao sto je kod tebe izgleda bilo u startu, dobices HTML entities, jer browser ne moze u tom enkodingu da prikaze cirilicna slova.
Znaci u zavisnosti od encodinga na tvojoj HTML strani na kojoj unosis tekst, dobices posle submita ISTI string, ali RAZLICITO enkodiran. Ne znam sta ti podrazumevas pod cirilicom, ali:
абц
àáö
абц
sva tri reda gore su "abc" (cirilicom), s tim sto je prvo utf-8 enkodirano, drugo windows-1251, a trece su entities. Ti naravno treba da odlucis sta ti treba i koji enkoding koristis.
[ bzero @ 01.05.2006. 17:09 ] @
Citat: Prtinac: Sa headerom se u bazu ubacuje nesto ovako...
Åëåìåíò
Uzgred budi receno, ovo sto si ti poslao Åëåìåíò - je rec "Element" (naravno cirilicom) u windows-1251 enkodingu.
[ Prtinac @ 01.05.2006. 17:18 ] @
Ok, kapiram da ne kapiram mnoge stvari u vezi tih kodnih strana.
U svakom slucaju, sada mi je u bazi tekst kao HTML entities, sto je ok, sta je tu je. Jedini problem je sto kada pretrazujem tu bazu po korisnickom upitu, moze da se trazi samo case sensitive tekst. Da li je to moguce nekako zaobici u MySQL-u? Ili moram ponovo da ubacujem sav tekst ali u nekom drugom encodingu da bi MySQL mogao da ga trazi case insensitive?
[ bzero @ 02.05.2006. 09:37 ] @
Ne verujem da je moguce zaobici taj problem u MySQL-u. Inace, najvece problemi kod entities-a su upravo problemi sa pretrazivanjem, kao i cinjenica da zauzimaju nekoliko puta vise prostora, umesto 1 ili 2 bajta za jedno slovo, kod entitesa treba 6 ili 7 bajta.
Najcistije resenje, po meni, je da se postojeci sadrzaj prebaci u neki normalan enkoding, npr utf-8, ali da li je to i prihvatljivo u konkretnom slucaju, drugo je pitanje.
[ rademit @ 03.07.2006. 14:18 ] @
Pređite na LINUX tamo to sve radi bez problema!
Never trust an operating system you don't have sources for.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|