[ EmmaR @ 27.02.2015. 20:50 ] @
Baza i tabele su postavljene na utf8 (utf8_slovenian_ci) i korišćen je latinični font
u PHP-u, pre pozivanja SQL upita postavljena je kodna strana kao utf8 (2puta: pri konekciji i upitom SET NAMES).
U HTML-u, koji poziva PHP je meta tagom postavljenja kodna strana na utf8.

U Firefox-u, Operi, Chrom-u je sve OK. Ali, kada se ista aplikacija pokrene pod IE onda on ne prihvata naša slova (žšđć) u pretrazi, dok ih pravilo prikazuje kao rezultat uspešno prepoznatih upita. Podaci su u latiničnom pismu, sa ćirilicom je još gore?
Ima li neko ideju gde je problem?
[ deZio @ 27.02.2015. 21:04 ] @
Da li koristiš u PHP fajlovima header za UTF-8?

Code (php):
header('Content-Type: text/html; charset=utf-8');


Objavi sve kodove da vidimo
[ Tpojka @ 27.02.2015. 21:41 ] @
Osim na pocetku dokumenta, postaviti accept-charset Attribute (UTF-8, pretpostavio bi'?) i u formu.
Disclaimer: Ovo ne vrijedi za vrijednosti koje su vec u bazi, vec za one koje se tek unose.
[ EmmaR @ 03.03.2015. 08:52 ] @
Citat:
deZio: Da li koristiš u PHP fajlovima header za UTF-8?

Code (php):
header('Content-Type: text/html; charset=utf-8');


Objavi sve kodove da vidimo


Nema efekta.

Citat:
Tpojka: Osim na pocetku dokumenta, postaviti accept-charset Attribute (UTF-8, pretpostavio bi'?) i u formu.
Disclaimer: Ovo ne vrijedi za vrijednosti koje su vec u bazi, vec za one koje se tek unose.

Sa prosleđivanjem iz forme nema problema.

---
Podaci se iz HTML prosledjuju posredstvo jQuery metoda .load() koji se aktivira klikom (izborom) jednog od dugmeta:
Code:

<!-- html, deo (primer)-->
<html><head>
<script>
$(document).ready(function(){    
  $("button").click(function(){
       $("#ciljni").load("obrada.php?nesto="+$(this).text()); // svejedno je da li je .text() ili .html()    
  });  
});
</script><head>
<body>
<div>
<button id="btn1">vrednost1</button>
<button id="btn2">vrednost2</button>
<button id="btn3">vrednost3</button>
<!-- i tako dalje, ima ih dosta -->
</div>
<div id="ciljni">
<!-- ovde ide rezultat -->
</div>

jQuery pravilno vidi naša slova. Na PHP strani je nešto ovako:
Code:

<?php
$nesto $_GET['nesto'];
echo $nesto;
?>

Pitate se gde je tu baza? Gde je tu upit? Problem nije u upitu, koji je ovakve konstrukcije:
Code:
$upit= "SELECT * FROM tabela WHERE kolona LIKE '{$nesto}%'";

već u $_GET['nesto'] koje ne prihvata naša slova i samim tim upit dobija neispravnu uslovnu vrednost. Problem je samo u IE dok ostali (Firefox, Chrome, Opera) ne prave problema.
Problem sam privremeno rešila tako što osim vrednosti (.text()) prosleđujem i vrednost atributa id (.attr("id")), pa imam nesto ovako:
Code:

<?php
$id = $_GET['id'];
$nesto = "";
if($id == "btn1") { $nesto = "ž"; }
elseif($id == "btn2") { $nesto = "č"; }
//tako za sva naša slova: žšđčć i dž
else { $nesto = $_GET['nesto']; }
echo $nesto;
?>

i, to radi. Ovde mi smeta što zbog samo par stavki prosleđujem dva parametra.
[ EmmaR @ 19.03.2015. 10:07 ] @
Nije ni do PHP ni do MySQL, već do JavaScript-a, tačnije jQuery i lošeg prosleđivanja vrednosti:

Umesto:
Code:

<!-- html, deo (primer)-->
<html><head>
<script>
$(document).ready(function(){    
  $("button").click(function(){
       $("#ciljni")[b].load("obrada.php?nesto="+$(this).text());[/b] // svejedno je da li je .text() ili .html()    
  });  
});
</script><head>
<body ... </body> </html>


trebalo je:
Code:

<!-- html, deo (primer)-->
<html><head>
<script>
$(document).ready(function(){    
  $("button").click(function(){
       $("#ciljni")[b].load( "obrada.php", { nesto: $(this).text() } );[/b] // svejedno je da li je .text() ili .html()    
  });  
});
</script><head>
<body ... </body> </html>

i u PHP-u:
Code:

<?php
$id = $_POST['nesto'];
// ...
?>


I, više IE ne pravi probleme.

P.S. Koliko li se vas 'zločesto' smejalo zbog privremeno zaboravljene razlike između GET i POST?
[ EmmaR @ 30.05.2015. 14:48 ] @
Ne bih da otvaram temu jer je opet vezano za naša slova i PHP uopšte (ostali 'krivci' isključeni).

Ako imam string koji sadrži naša slova (žšđčć), njega PHP ispravno prikazuje.
Ali, kada taj string treba treba tretirati kao niz znakova ili ga prebaciti u niz, onda ih ne prikazuje ispravno.
Problem je isti i sa vrednostima prosleđenim od strane HTML forme i sa vrednostima kreiranim u samom PHP-u.
Trenutno sam problem rešila uz pomoć JavaScript-a (prosleđivanje iz HTML forme): string konvertujem u niz znakova pre prosleđivanja i onda nema problema.

Gde grešim?

PHP
Code:

header('Content-Type: text/php; charset=UTF-8'); //početak
//itd...

[ Tpojka @ 30.05.2015. 16:03 ] @
Sta ti znaci "kada ga treba tretirati kao niz znakova ili ga prebaciti u niz"?
Daj nam jos malo koda. Nemoj si stipsa.
[ EmmaR @ 01.06.2015. 15:02 ] @
Citat:
Tpojka: Sta ti znaci "kada ga treba tretirati kao niz znakova ili ga prebaciti u niz"?
Daj nam jos malo koda. Nemoj si stipsa.

Evo nesto na brzaka:
Code:

<?php
header('Content-Type: text/php; charset=UTF-8'); //ovo je na pocetku skripte
$string = "SunČan dan."; //tu je problematično Č (slicno vazi i za: žšđčć - nebitno da li je malo ili veliko)
echo "String: {$string}<br>"; //ovde je sve OK
$temp = "";
for($i=0; $i<strlen($string); $i++)
{
   $temp = $string[$i];
   echo "Original: {$string[$i]} + kopija: {$temp}<br>"; //Č: => $string[$i]=Č ali $temp='kinesko slovo'
}
?>

da ne budem stipsa.

Problem je kada se string tretira kao niz znakova ili ako se pretvori u niz gde su vrednosti niza jednake pojedinačnim znakovima stringa:
"Sunčan dan" => {'S','u','n','č','a','n',' ','d','a','n,'}
ali ne i ako se podeli na grupe znakova (reči), npr:
"Sunčan dan" => {"Sunčan","dan"}

[ Tpojka @ 01.06.2015. 17:00 ] @
Radi se o multi byte znakovima, pa s time treba koristiti i mb_ prefixed PHP string funkcije.

Code (php):

<?php
header('Content-Type: text/php; charset=UTF-8');
$string = "SunČan dan.";

echo strlen($string);//12
echo mb_strlen($string);//11

$temp = "";
for($i=0; $i < mb_strlen($string, 'UTF-8'); $i++)
{
   $temp = mb_substr($string, $i, 1, 'UTF-8');// http://php.net/manual/en/function.mb-substr.php
   echo $temp ."\n";
}
?>
 


Referenca.
[ EmmaR @ 02.06.2015. 09:15 ] @
Citat:
Tpojka: Radi se o multi byte znakovima, pa s time treba koristiti i mb_ prefixed PHP string funkcije.

Code (php):

<?php
header('Content-Type: text/php; charset=UTF-8');
$string = "SunČan dan.";

echo strlen($string);//12
echo mb_strlen($string);//11

$temp = "";
for($i=0; $i < mb_strlen($string, 'UTF-8'); $i++)
{
   $temp = mb_substr($string, $i, 1, 'UTF-8');// http://php.net/manual/en/function.mb-substr.php
   echo $temp ."\n";
}
?>
 


Referenca.


Hvala! Nisam ni primetila da pogrešno broji.
[ ProgramerVL @ 03.06.2015. 00:21 ] @
Ovaj drugi problem se javio zbog toga što čćšđž zauzimaju 2 dva bajta u memoriji(UTF-8)
A prvi problem se javio zbog toga što string nije prvo kodiran pomoću encodeURIComponent ili encodeURI
Code:

<!-- html, deo (primer)-->
<html><head>
<script>
$(document).ready(function(){    
  $("button").click(function(){
      // encodeURIComponent("Č") vraća kao rezultat "%C4%8C";
       var url = encodeURI("obrada.php?nesto="+$(this).text()); // naša slova zatim razmak itd. mora da se kodiraju
       $("#ciljni").load(url);
  });  
});
</script>
</head><!-- head nije pravilno zatvoren u tvom primeru-->
<body>... </body> </html>

A PHP koristi GET metodu:
Code:

$nesto = $_GET["nesto"];
[ EmmaR @ 03.06.2015. 10:18 ] @
Citat:
ProgramerVL: Ovaj drugi problem se javio zbog toga što čćšđž zauzimaju 2 dva bajta u memoriji(UTF-8)
A prvi problem se javio zbog toga što string nije prvo kodiran pomoću encodeURIComponent ili encodeURI
Code:

<!-- html, deo (primer)-->
<html><head>
<script>
$(document).ready(function(){    
  $("button").click(function(){
      // encodeURIComponent("Č") vraća kao rezultat "Č";
       var url = encodeURI("obrada.php?nesto="+$(this).text()); // naša slova zatim razmak itd. mora da se kodiraju
       $("#ciljni").load(url);
  });  
});
</script>
</head><!-- head nije pravilno zatvoren u tvom primeru-->
<body>... </body> </html>

A PHP koristi GET metodu:
Code:

$nesto = $_GET["nesto"];


Čekaj, jeli ovo važi samo za GET ili i za POST? Pitam jer mi POST naše znakove prosleđuje bez ikakvog problema i PHP pojedinačne znakove prihvata isto bez ikakvog problema:
Code:

<script>
$(document).ready(function(){    
  $("button").click(function(){
      $("#ciljni").load("obradi.php",{
          prvi: vrednost1,   //PHP: $prvi = $_POST['prvi'];
          drugi: vrednost2   //PHP: $drugi = $_POST['drugi'];
      });
  });  
});
</script>

Problem se manifestovao tek kada se ukazala potreba da string pročitam i obradim kroz pojedinačne znakove.
Za GET znam da ne može sve da prenosi, mada znam često i da to zaboravim - prvi put sam ovu temu i pokrenula baš zbog tog problema koji se manifestovao samo na IE, dok ostali nisu pravili problema. Na kraju sam problem rešila tako što sam podatke prosleđivala POST metodom jer mi u konkretnom slučaju metod prenosa nije bio bitan.
[ ProgramerVL @ 03.06.2015. 21:16 ] @
U hromu, kada šaljem GET metod bez prethodnog kodiranja umesto čovek PHP mi vraća &#269;ovek
Dok kada šaljem POST metodom bez kodiranja vraća mi čovek, tako da za POST metod i ne mora da se kodira,
Na MDN-u piše da se svi korisnički unosi trebaju prvo kodirati pre slanja na server
MDN referenca