Problém s kódováním skriptů versus jejich zobrazení
- lkamil987
- Člen | 4
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
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
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
- 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.
- 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
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>
- lkamil987
- Člen | 4
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:-)