Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
helpless
HV kasutaja

liitunud: 28.08.2009
|
29.03.2013 02:34:10
Kodeering |
|
|
Mure siis täpitähtedega. Koodi kodeering on utf-8 - index.php on ka kõik utf-8.
Kui ma sisestan kasti sõnumi, siis see ei kuva täpitähti. Kuvab mingit hiina jama.
Andmebaasis ei kuva ka täpitähti. Ei tea milles jama võib olla?
Kui kirjutan näiteks teate edastamine asemel jänes - siis seal kuvab kõik korralikult.
Spoiler 
<?php
begintabel("Teate edastamine");
?>
<table border="0" width="100%" bordercolor=black border=0><tr><th colspan="4">Teatekast</th></tr>
<?
$info = mysql_query("SELECT `nimi`,`sonum`,`time` FROM `tabel` ORDER BY `time` DESC LIMIT 0,10");
while($row = mysql_fetch_object($info))
{
$string = str_replace("\'","'",$row->sonum);
$string = htmlentities($row->sonum, ENT_QUOTES);
$search = array(
":(",
"[",
"]");
$replace = array(
"<img src=images/smilies/see.gif border=0>",
"*",
"*",
);
$row->sonum = str_replace($search, $replace, $string);
$row->sonum = opmaak($row->sonum);
?>
<tr>
<td class="row1" colspan="2"><font color="gold"><b><?=$row->nimi;?>:</b></font> <?=$row->sonum;?></td>
<td class="row1" width="20" align="center">
<img src="./images/icons_gif/clock.gif" alt="<?=$row->time;?>" title="<?=$row->time;?>" />
</td>
</tr>
<?
}
?>
<form method="post">
<tr>
</tr>
</form>
</table>
<?php
eindetabel();
?> |
|
|
Kommentaarid: 14 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
14 |
|
tagasi üles |
|
 |
Genobe222
HV vaatleja
liitunud: 18.05.2009
|
29.03.2013 12:08:52
|
|
|
Charseti võid panna "ISO 8859-4", siis peaks kenasti kuvama: <meta http-equiv="Content-Type" content="text/html; charset=ISO 8859-4">.
Mulle on sisse harjunud ü, ö, ä, õ asemel ü, &ooml;, ä ja õ kirjutamine. str_replace-ga saad selle automaatselt ära teha.
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
Alan
HV veteran

liitunud: 12.02.2008
|
29.03.2013 12:34:35
|
|
|
Kui kõik (faili encoding, meta charset) on UTF8 ja andmebaasist ei tule täpitähed, siis pead üle vaatama andmebaasi, tabeli ja tabeli väljade charsetid ning need samuti UTF8-ks muutma: utf8_general_ci või võid ka kasutada utf8_estonian_ci. Näiteks phpMyAdminist on üsna lihtne seda teha. By default on päris paljudel latin1_swedish_ci.
Veebis ISO-8859-xx charsettide ja täpitähtede asemel entitide kasutamine jäägu traditsioonidelt aastasse 98.
Juhend phpMyAdminis tegemiseks:
1. Valid andmebaasi -> "Operations" -> Collation -> utf8 -> Go
2. Structure -> Valid tabeli -> Operations -> Collation -> utf8 -> Go
3. Structure -> Muudad välju -> Collation -> utf8 -> Go
|
|
Kommentaarid: 131 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
121 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
29.03.2013 12:36:43
|
|
|
Alan, "PHP only supports a 256-character set, and hence does not offer native Unicode support".
http://php.net/manual/en/language.types.string.php
Üks hoiatus näiteks lehelt: "Internally, PHP strings are byte arrays. As a result, accessing or modifying a string using array brackets is not multi-byte safe, and should only be done with strings that are in a single-byte encoding such as ISO-8859-1."
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
helpless
HV kasutaja

liitunud: 28.08.2009
|
29.03.2013 12:51:43
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO 8859-4 ja utf-8">. Ei aidanud.
Tabeleid muutsin ka aga ikka sama lugu.
Kas keegi str_replace-e asja mul koodi ei taha ära kirjutada, palun?
|
|
Kommentaarid: 14 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
14 |
|
tagasi üles |
|
 |
Alan
HV veteran

liitunud: 12.02.2008
|
29.03.2013 12:59:41
|
|
|
mikk36 kirjutas: |
Alan, "PHP only supports a 256-character set, and hence does not offer native Unicode support".
http://php.net/manual/en/language.types.string.php
Üks hoiatus näiteks lehelt: "Internally, PHP strings are byte arrays. As a result, accessing or modifying a string using array brackets is not multi-byte safe, and should only be done with strings that are in a single-byte encoding such as ISO-8859-1." |
... accessing or modifying a string using array brackets ...
Kui kasutada multibyte tähti kuskil, siis tuleb kasutada ka vastavalt multibyte funktsioone (mb_...), aga see on juba suhteliselt teemaväline.
tsitaat: |
Obviously enough, all files you'll be serving (PHP, HTML, JavaScript, etc.) should be encoded in valid UTF-8.
You need to make sure that every time you process a UTF-8 string, you do so safely. This is, unfortunately, the hard part. You'll probably want to make extensive use of PHP's mbstring extension.
PHP's built-in string operations are not by default UTF-8 safe. There are some things you can safely do with normal PHP string operations (like concatenation), but for most things you should use the equivalent mbstring function.
To know what you're doing (read: not mess it up), you really need to know UTF-8 and how it works on the lowest possible level. Check out any of the links from utf8.com for some good resources to learn everything you need to know. |
Aasta 98 traditsiooni all mõtlesin seda:
Ja seda: http://w3techs.com/technologies/overview/character_encoding/all
Lugeda tuleks ka seda: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
viimati muutis Alan 29.03.2013 13:12:47, muudetud 5 korda |
|
Kommentaarid: 131 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
121 |
|
tagasi üles |
|
 |
napoleon
Unknown virus

liitunud: 08.12.2008
|
29.03.2013 13:00:59
|
|
|
Proovi charset http headeris öelda.. Selleks pane koodi esimeseks reaks midagi sellist:
header('Content-Type: text/html; charset=UTF-8');
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
helpless
HV kasutaja

liitunud: 28.08.2009
|
29.03.2013 13:12:10
|
|
|
Mitte ei saa
Äkki panen midagi valesti?
Lihtsalt header('Content-Type: text/html; charset=UTF-8'); - seda ka panna ei saa ju.
Tal pole nii mingit käsklust ju?
Lisa ise ära ja lisa väike kood mulle siia näitamiseks?
Ei saa ju asi nii keeruline ometi olla. Või mis?
viimati muutis helpless 29.03.2013 13:31:18, muudetud 1 kord |
|
Kommentaarid: 14 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
14 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
29.03.2013 13:19:00
|
|
|
Alan, just, võimalik on, aga selle jaoks tuleb väga hoolikalt jälgida, et midagi ära ei lõhuks.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
napoleon
Unknown virus

liitunud: 08.12.2008
|
29.03.2013 13:33:46
|
|
|
Mis siin siis aru saada:
php:
|
<?php header('Content-Type: text/html; charset=UTF-8'); //siia kogu ülejäänud kood ?>
|
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
helpless
HV kasutaja

liitunud: 28.08.2009
|
29.03.2013 15:44:04
|
|
|
Sellest ei ole kasu.
_________________ Need to hear louder! |
|
Kommentaarid: 14 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
14 |
|
tagasi üles |
|
 |
napoleon
Unknown virus

liitunud: 08.12.2008
|
29.03.2013 16:17:46
|
|
|
Kui oled kõik varem soovitatu järgi proovinud ja ikka ei toimi, siis paistab, et kasutad mingit frameworki, mis selle ära käkib. Kui sul on mingi testkeskkond, mille saab avalikuks teha, siis võibolla oskab keegi mõne vihje anda. Kui sisestad phpMyAdmin või muu baasi haldusliidese abil midagi otse andmebaasi, kas siis kuvab korrektselt? Lehte ja kogu koodi nägemata on selle foorumi kaudu lahendamine hetkel nõela heinakuhjast otsimine.
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
helpless
HV kasutaja

liitunud: 28.08.2009
|
29.03.2013 16:36:34
|
|
|
Kogu jama tundub olevat andmebaasiga vist.
Kõik mu toimib hästi. Siis kui info andmebaasi läheb on täpitähed kadunud.
Kui ma kustutan andmebaasis selle sisestatud teksti ära ja asemele kirjutan ise sinna näiteks jänes, siis kuvab korralikult.
Äkki saab kuidagi selle str_replace-ga?
Ma ise ei oska seda sinna kirjutada juurde.
|
|
Kommentaarid: 14 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
14 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
29.03.2013 16:43:15
|
|
|
Mina teen andmebaasi sellise kodeeringuga tabelid ja sealt pole kunagi mingit jama olnud. Ainuke, mis phpmyAdmin is vaadatuna on kül baasis veidraid märke, kuid ma pole sellele tähelepanu pööranud, kuna lehtedel selliselt kõik toimib.
$paring="CREATE TABLE IF NOT EXISTS albumA1 (
id int(11) NOT NULL auto_increment,
albumN text NOT NULL,
inv int(1) NOT NULL,
PRIMARY KEY (id)
)DEFAULT CHARSET=utf8;"; |
Kas sul failid on UTF-8 kodeeringus salvestatud? See üks põhi viga mille tõttu ei saa täpitähti lehele.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
napoleon
Unknown virus

liitunud: 08.12.2008
|
29.03.2013 16:54:42
|
|
|
Kui tahad kangesti ise märke vahetada, vaata funktsioone utf8_encode ja utf8_decode. Saab ka str_replace abil, aga vaevalt keegi viitsib sulle str_replace abil valmis lahendust tegema hakata... selleks toksi googlesse utf-8 ja uuri hex editoriga mis märgid sinna praegu lähevad ja saadki teada, mida mille vastu vahetama pead.
Samas olgu öeldud, et see tegevus on siiski päraku kaudu hammaste parandamine ja õigem oleks üles otsida, mis jama on andmete baasi salvestamise ja/või sealt lugemisega.
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
helpless
HV kasutaja

liitunud: 28.08.2009
|
|
Kommentaarid: 14 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
14 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
29.03.2013 17:07:27
|
|
|
Siis sul viga ongi ju tabeli kodeeringus vaata mu eelmist posti sul ju latin1 kodeering
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
helpless
HV kasutaja

liitunud: 28.08.2009
|
29.03.2013 17:19:19
|
|
|
Ma muutsin seda vist nii: )
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=762 ; |
Aga sellest vist polnud kasu.
Või kuidas ma seda muutma peaks?
Proovin kohe seda:
ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=762 ; |
|
|
Kommentaarid: 14 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
14 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
29.03.2013 17:21:21
|
|
|
Las targemad ütlevad, kuidas muuta, kui ainult nii muudad tuleb tabel maha kustutada, kuna olemas oleva tabeli korral selliselt midagi ringi ei tehta. Kuidagi phpmyAdminist ehk.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
napoleon
Unknown virus

liitunud: 08.12.2008
|
29.03.2013 18:44:07
|
|
|
sql:
|
ALTER TABLE `tabel` COLLATE='utf8_estonian_ci', ENGINE=MyISAM;
|
|
|
Kommentaarid: 77 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
60 |
|
tagasi üles |
|
 |
Redikate
HV veteran

liitunud: 30.12.2005
|
29.03.2013 23:18:51
|
|
|
Veits OT, aga ma ei saanud naeru pidama @:
Genobe222 kirjutas: |
Mulle on sisse harjunud ü, ö, ä, õ asemel ü, &ooml;, ä ja õ kirjutamine. |
Parim lahendus siin teemas.
|
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
33 |
|
tagasi üles |
|
 |
|