Autor Zpráva
thommie
Profil *
Zdravím,

mám tento kód:
// příprava proměnných
$jmeno_restaurace_rg = ucfirst($_POST["jmeno_restaurace"]);
$mesto_rg = ucfirst($_POST["mesto"]);
$ulice_rg = ucfirst($_POST["ulice"]);
$pivo_rg = ucfirst($_POST["pivo"]);

//příprava promennych pro vyhledávací část tabulky
	//odstraneni prazdnych znaku
		$restaurace_pz=trim($jmeno_restaurace_rg);
		$mesto_pz=trim($mesto_rg);
		$ulice_pz=trim($ulice_rg);
		$pivo_pz=trim($pivo_rg);
	
	
		// úprava adresy pro google mapy pro IE
$prevodni_tabulka = Array('ä'=>'a','Ä'=>'A','á'=>'a','Á'=>'A','à'=>'a','À'=>'A','ã'=>'a','Ã'=>'A','â'=>'a','Â'=>'A','č'=>'c','Č'=>'C','ć'=>'c','Ć'=>'C','ď'=>'d',
  'Ď'=>'D','ě'=>'e','Ě'=>'E','é'=>'e','É'=>'E','ë'=>'e','Ë'=>'E','è'=>'e','È'=>'E','ê'=>'e','Ê'=>'E','í'=>'i','Í'=>'I','ï'=>'i','Ï'=>'I','ì'=>'i','Ì'=>'I','î'=>'i','Î'=>'I','ľ'=>'l','Ľ'=>'L','ĺ'=>'l','Ĺ'=>'L','ń'=>'n','Ń'=>'N','ň'=>'n','Ň'=>'N','ñ'=>'n','Ñ'=>'N','ó'=>'o','Ó'=>'O','ö'=>'o','Ö'=>'O','ô'=>'o','Ô'=>'O','ò'=>'o','Ò'=>'O','õ'=>'o','Õ'=>'O','ő'=>'o','Ő'=>'O','ř'=>'r','Ř'=>'R','ŕ'=>'r','Ŕ'=>'R','š'=>'s','Š'=>'S','ś'=>'s','Ś'=>'S','ť'=>'t','Ť'=>'T','ú'=>'u','Ú'=>'U','ů'=>'u','Ů'=>'U','ü'=>'u','Ü'=>'U','ù'=>'u','Ù'=>'U','ũ'=>'u','Ũ'=>'U','û'=>'u','Û'=>'U','ý'=>'y','Ý'=>'Y','ž'=>'z','Ž'=>'Z','ź'=>'z','Ź'=>'Z');
//prevod na mala pismena
$restaurace_low = strtolower($restaurace_pz);
$mesto_low = strtolower($mesto_pz);
$ulice_low = strtolower($ulice_pz);
$pivo_low = strtolower($pivo_pz);

// odstraneni diakritiky
$restaurace = strtr($restaurace_low, $prevodni_tabulka);
$mesto_vt = strtr($mesto_low, $prevodni_tabulka);
$ulice_vt = strtr($ulice_low, $prevodni_tabulka);
$pivo_vt = strtr($pivo_low, $prevodni_tabulka);
		
		


ve kterém zkrátka převádím řetězce napřed na malá písmena a potom tato "malá písmena" na řetezec bez diakritiky a každé stádium ukládám zvlášť do databáze. Z počátku to fungovalo, ale najedou přestalo. Resp. na localhostu se bez diakritiky a malá písmena neuloží a na webu se neuloží jen malá písmena a pokud napíšu vše bez diakritiky, tak se uloží vše. četl jsem, že fce STRTOLOWER může mít problémy s češtinou či co, nevíte někdo jak to ošetřit?

díky za odpověď
Nox
Profil
zkus
mb_strtolower


případně nám napiš to ukládání, charset (používáš set names?) atd.
thommie
Profil *
mb_strtolower nepomohlo, ukládání je tohle:
$vysledek = mysql_query("INSERT INTO restaurace (jmeno_restaurace, heslo, mesto, ulice, cp, psc, kraj, pivo, ic, email, telefon, popis_registrace, datum_registrace, v_restaurace, v_mesto, v_ulice, pivo5, pivo6, b_restaurace, b_mesto, b_ulice) VALUES ('$jmeno_restaurace_rg', '".$_POST['heslo']."', '$mesto_rg', '$ulice_rg', '".$_POST['cp']."', '".$_POST['psc']."', '".$_POST['kraj']."', '".$_POST['pivo']."', '".$_POST['ico']."', '".$_POST['myemail']."', '".$_POST['telefon']."', '".$_POST['popis_registrace']."', now(), '$restaurace', '$mesto_vt', '$ulice_vt', '$pivo_vt', '$pivo_low', '$restaurace_low', '$mesto_low', '$ulice_low')");
Anonym
Profil *
napíšu vše bez diakritiky, tak se uloží vše
Je v databázi nastaveno utf8_czech_ci všude, kam to patří? Když se zapisuje neznámý znak do databáze, tak to krachne. Co vypisuje echo $restaurace_low = strtolower($restaurace_pz); resp. echo $restaurace_low = mb_strtolower($restaurace_pz); vsadím boty, že to vypisuje správně a chyba je ve vkládání do databáze - musí tam být správná znaková sada.
thommie
Profil *
no je fakt, že to mám všechno v utf_bin :D takže to mám u těhlech položek změnit na utf8_czech_ci? já se upřímně moc v mysql nevyznám, takže tam mám problémy celkem pravidelně, jinak díky za pomoc
thommie
Profil *
No nevim, na localhostu to prostě nerozchodím, na webu to jaktakž jde, i když ne dokonale (občas to nechá velký písmeno, občas ne, nechápu...) - ale aspoň to ukládá
Anonym
Profil *
občas to nechá velký písmeno, občas ne, nechápu...
ucfirst asi taky nerozumí česky, zkus toto:
if (!function_exists('mb_ucfirst') && function_exists('mb_substr')) 
    {
    function mb_ucfirst($string) 
      {
      $string = mb_strtoupper(mb_substr($string, 0, 1, 'utf-8'), 'utf-8') . mb_substr($string, 1, mb_strlen($string), 'utf-8');
      return $string;
      }
    }
   
$jmeno_restaurace_rg = mb_ucfirst($_POST["jmeno_restaurace"]);
...
 
thommie
Profil *
díky, tohle je hodně použitelná věcička :)
korny
Profil *
tohle je lepsi :-)
tamto mi bez toho preg_match neslo 100% a tohle i ostatni pismena hodi na mala

public function filter($string, $enc = 'utf-8') {
		if (function_exists ( 'mb_strtoupper' ) && function_exists ( 'mb_substr' ) && ! empty ( $string )) {
			$string = mb_strtolower ( $string, $enc );
			$upper = mb_strtoupper ( $string, $enc );
			preg_match ( '#(.)#us', $upper, $matches );
			$string = $matches [1] . mb_substr ( $string, 1, mb_strlen ( $string, $enc ), $enc );
		} else {
			$string = ucfirst ( $string );
		}
		return $string;
	}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0