Problém s kódováním skriptů versus jejich zobrazení

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
lkamil987
Člen | 4
+
0
-

Ahoj, rozbíhám Nette a v celku funguje dobře, jen mám zásadní problém s kódováním. Beru, že vše musí být uloženo pod UTF-8 bez BOM a kódování stránky musí být také v UTF-8. Když toto udělám, skripty mi fungují, ale v prohlížeči jsou mnohé znaky nečitelné. Kupříkladu mám tento příklad form-example-cs.php

Ve výsledném skriptu kontroly fungují, ale diakritika je rozhozená. Pouze diakritika javascriptových hlášek je v pořádku. Kódy edituji v NOTEPAD++.

Děkuji za odpověď.

<?php

require 'Nette/loader.php';


$form = new NForm;

$form->addText('name', 'Jméno:')
    ->setRequired('Zadejte prosím jméno');

$form->addText('age', 'Věk:')
	->setType('number')
    ->addRule(NForm::INTEGER, 'Věk musí být číslo')
	->addRule(NForm::RANGE, 'Věk musí být v rozmezí od %d do %d let', array(18, 120));

$form->addPassword('password', 'Heslo:')
	->setRequired('Zvolte si heslo')
	->addRule(NForm::MIN_LENGTH, 'Heslo musí mít alespoň %d znaky', 3);

$form->addPassword('passwordVerify', 'Heslo pro kontrolu:')
	->setRequired('Zadejte prosím heslo ještě jednou pro kontrolu')
	->addRule(NForm::EQUAL, 'Zadané hesla se neshodují', $form['password']);

$form->addSubmit('send', 'Registrovat');

$form->setDefaults(array(
    'name' => 'John',
    'age' => 33,
));



if ($form->isSubmitted() && $form->isValid()) {
    echo 'Formulář byl správně vyplněn a odeslán';

    $values = $form->getValues();
    dump($values);
}

?>

<!DOCTYPE html>
<html lang="cs">
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8">

	<title>Nette\Forms basic example | Nette Framework</title>

	<style type="text/css">
	.required {
		color: darkred
	}

	fieldset {
		padding: .5em;
		margin: .5em 0;
		background: #E4F1FC;
		border: 1px solid #B2D1EB;
	}

	input.button {
		font-size: 120%;
	}

	th {
		width: 10em;
		text-align: right;
	}
	</style>

	<script src="netteForms.js"></script>
</head>

<body>
	<h1>Nette\Forms basic example</h1>


	<?php echo $form ?>


	</body>
</html>
Newbiek
Člen | 12
+
0
-

Předpokládám, že máš Windows. Zkus si změnit v prohlížeči kódování na windows-1250. Pokud se ti pak ty rozozené znaky zobrazí správně, pak je chyba ve windowsech, které mají standartní kódování právě windows-1250, případně v nastavení editoru – to by mělo jít většinou změnit. (A pokud vím, pokud nemáš presenter v UTF-8 (nebo jeho části), tak ti to nezahlásí chybu – mně to také dělalo)

EDIT: Zkus dát nějaký háčky a čárky do toho samotnýho viewu, pak by ti to mohlo zahlásit chybu s UTF-8. Třeba <h1>Nette\Forms basic example</h1> změň na <h1>Nette\Forms žluťoučký</h1>. Zda-li ti to nevyhodí tu chybu s UTF-8.

Editoval Newbiek (25. 7. 2011 17:00)

lkamil987
Člen | 4
+
0
-

Děkuji za odpověď, ano, jsem na W7 64bit a PHP mi jede pod XAMPPem. Nastavení znakové sady v prohlížeči na win1250 nepomohlo. Pomohlo, když jsem jej nastavil na UNICODE(UTF-8), ale to je rychlé řešení pro mne jako vývojáře. To nepůjde použít pro ostatní uživatele. Mělo by to být přece tak, že výsledný html kód se zobrazí správně na každém prohlížeči nezávisle, jestli to je na Windowsech popř jiných operačních systémech.

Nebo ty znaky „komolí“ přímo PHP běžící pod WIN? To se mi zdá již divoké.

Je li presenterem míněno:

<!DOCTYPE html>
<html lang="cs">
<head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
.
.
.

tak zde kódovani UTF-8 nastaveno je též.

Etch
Člen | 403
+
0
-
  1. zkus si tam dát místo
<meta http-equiv="content-type" content="text/html; charset=utf-8">
toto
<meta charset="utf-8" />

ovšem dá se předpokládat, že to tím nebude, protože v HTML5 by měl fungovat i ten tvůj zápis.

  1. zkontroluj jestli v hlavičkách je opravdu nastaveno, že se jedná o utf-8 (například ve FireBugu).

PS: Používám UTF-8 už léta na různých vývojových strojích od Debianu, Ubuntu, WinXP, Win Vista až po Win 7 a nikdy jsem se s tímto problémem nesetkal. Pokud ovšem říkáš, že to funguje, když v prohlížeči nastavíš kódování ručně, tak bych předpokládal, že prohlížeč postě tu hlavičku o kódování nedostane.

lkamil987
Člen | 4
+
0
-

Ahoj vypadá to, že ty nečitelné znakz jsou už odeslány do prohlížeče :

v kódu skriptu je toto:

<!DOCTYPE html>
<html lang="cs">
<head>

	<meta charset="utf-8" />
	<title>Nette\Forms basic example | Nette Framework</title>

	<script src="netteForms.js"></script>
</head>

<body>ěščřžýáíé
	<h1>Nette\Forms basic  žluťoučký</h1>

a ve výsledném HTML kódu je toto:

<!DOCTYPE html>
<html lang="cs">
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8">

	<title>Nette\Forms basic example | Nette Framework</title>

	<script src="netteForms.js"></script>
</head>

<body>Ä�ĹĄÄ�Ĺ�ŞýåĂĂŠ
	<h1>Nette\Forms basic  Şlużou�ký</h1>
joseff
Člen | 233
+
0
-

A zkoušel jsi to nahrát a spustit třeba z nějakého linuxu?

lkamil987
Člen | 4
+
0
-

Zdravím, tak to vypadá, že problém byl v nastavení appache v XAMPPu tam byl nastaven parametr AddDefaultCharset ISO-8859–2
po přepsání na
AddDefaultCharset UTF-8 to funguje.

Děkuji vám všem za reakce.

Protože jeden projekt, kterým se zabývám běží na apache právě s konfigurací AddDefaultCharset ISO-8859–2 i spolu s kódobanám v MYSQL, je vcelku otázkou jestli má smysl do takového projektu implementovat nette platformu. Protože po překonfigurování Appache by se musel přepsat úplně celý projekt.

Co si o tom myslíte?

PS: U ostaních nových projektů samozřejmě NETTE použiji:-)

voda
Člen | 561
+
0
-

Vždycky můžeš content-type posílát i z PHP. Třeba pomůže direktiva default_charset.