2012-12-13 16 views
5

Ho creato un modulo che gli utenti possono compilare e controlla se l'utente inserisce correttamente l'e-mail.'La codifica del carattere del documento HTML non è stata dichiarata' problemi

  • Se restituisce falso: l'utente visualizza un messaggio di errore.
  • Se restituisce true: mostrerà all'utente un messaggio di conferma ma sarà anche INSERT i dati nel database.

Quindi il problema si è verificato quando ho tentato di aggiungere il modulo nel file PHP in modo da poter effettuare un avviso o fornire all'utente il messaggio di errore sulla stessa pagina. Ho iniziato a ottenere questo errore:

The character encoding of the HTML document was not declared. The document will render with garbled text in some browser configurations if the document contains characters from outside the US-ASCII range. The character encoding of the page must to be declared in the document or in the transfer protocol.

così ho cercato di ripristinare questa ritornando alla versione precedente, ho dovuto tagliare e incollare alcuni pezzi di codice, ma niente di troppo complicato. Per qualche strano motivo ho ancora questo errore. Naturalmente ho controllato gli argomenti simili su questo problema qui su Stackoverflow, ma nessuna delle risposte mi ha permesso di andare oltre. Ad esempio aggiungendo le informazioni meta nell'intestazione della pagina, ho anche creato un'intestazione PHP come questa: header('Content-type: text/html; charset=utf-8'); Successivamente ho letto alcuni articoli su questo errore ma nessuno mi ha aiutato a risolvere questo problema.

Ecco un esempio del mio codice. E 'questa pagina ottengo l'errore:

<?php  
include_once('credentials.php'); 
mysql_connect($host, $user, $pass) or die(mysql_error()); 
mysql_select_db($db) or die(mysql_error()); 
include_once('functions.php'); 

$apples = sanitize($_POST['Apple']); 
$oranges = sanitize($_POST['Orange']); 
$melons = sanitize($_POST['Melon']); 
$pears = sanitize($_POST['Pear']); 
$strawberries = sanitize($_POST['Strawberry']); 
$grapes = sanitize($_POST['Grape']);    
    if($_POST['Grape'] == 'Yes') 
    { $grapes = 1; } 
    else 
    { $grapes = 0; } 
$blueberries = sanitize($_POST['Blueberry']); 

if (checkStrawberries($strawberries) == true) {  
    mysql_query(" INSERT INTO tablename (Name, Weight, Color, Ripeness, Age, Origin, Destination) 
      VALUES ('$apples', '$oranges', '$melons', '$Pears', '$strawberries', '$grapes', '$blueberries') "); 

    or die(mysql_error()); 

    echo '<!DOCTYPE html> 
      <html> 
       <head> 
        <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> 
       </head> 
       <title>Page</title> 
       <body> 
        True 
        <a href="../index.php">home</a> 
       </body> 
      </html>'; 
} else { 
    echo '<!DOCTYPE html> 
      <html> 
       <head> 
        <meta content="text/html;charset=utf-8" http-equiv="Content-Type"> 
       </head> 
       <title>Pagina</title> 
       <body> 
        False 
        <a href="../index.php">home</a> 
       </body> 
      </html>'; 
} 
?> 

ho dovuto rinominare le variabili e le classi in quanto hanno forti rapporti con l'azienda per cui lavoro.

EDIT: questo errore viene generato dal log della console in Firefox che utilizza Firebug.

MODIFICA 2: Modificato i nomi var e funzione per evitare confusione e per illustrare lo scambio di dati all'interno di questa applicazione.

EDIT 3: Ho cercato di capire che cosa esattamente nel mio codice sta producendo questo errore, perché ho testato la parte di codifica con il test case presentato da me sotto Dobromir Velev e che ha funzionato bene. Ho deciso di commentare la dichiarazione IF ELSE e non ho ricevuto un errore. Quindi questo sembra corrompere la pagina.

Ho rimosso l'eco per ora in quanto non ha aggiunto alcun valore a questa particolare sfida.

if (checkStrawberries($strawberries) == true) {  
    mysql_query("INSERT INTO tablename (Name, Weight, Color, Ripeness, Age, Origin, Destination) 
    VALUES ('$apples', '$oranges', '$melons', '$Pears', '$strawberries', '$grapes', '$blueberries') "); 
    or die(mysql_error()); 
} else { 
    echo 'FALSE'; 
} 

I checkStrawberries funzione è questa:

function checkEmail($email) { 
if (!preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-] +)+$/" , $email)) { 
return false; 
} 
return true; 
} 

La disinfettare funzione è questo:

function sanitize($dirty){ 
$clean = htmlspecialchars($dirty); 
$cleaner = mysql_real_escape_string($clean); 
return $cleaner; 
} 
+2

Dove esattamente vedi quel messaggio, che cosa lo sta producendo? – deceze

+1

Spero tu non abbia davvero chiamato la funzione 'function'? ('Function ($ _ POST [ '1']);'). Probabilmente questo danneggerà anche il codice dato che 'function' è una parola chiave riservata. – Jelmer

+0

@deceze Controllare la modifica. –

risposta

1

Dopo qualche discussione sulla chat di PHP, sembra che il problema deriva dal punto e virgola in più

Da:

mysql_query(); or die(); 

A:

mysql_query() or die(); 
+0

Grazie Touki! Questo era davvero il problema. Un tale stupido errore da trascurare. –

1

vorrei iniziare cercando un file con entrambe le intestazioni HTTP ei meta tag .

<?php 
header("Content-Type: text/html; charset=utf-8"); 
?> 

<html> 
<head> 
<meta content="text/html;charset=utf-8" http-equiv="Content-Type"> 
<meta content="utf-8" http-equiv="encoding"> 
</head> 
<body> 
text 
</body> 
</html> 

Se ciò non causa l'errore, è probabilmente qualcosa nel codice. Ad esempio, lo spazio prima del tag <?php impedirà a PHP di impostare l'intestazione HTTP. Anche se qualsiasi contenuto viene restituito dai file include file1.php o file2.php potrebbe causare il browser per rilevare la codifica in modo non corretto

+0

Non penso che i dati vengano passati attraverso gli include, contengono solo alcune funzioni. –

+0

Controllare le intestazioni di risposta HTTP - a volte il server HTTP potrebbe modificare la codifica –

+0

Ho provato questo e non ha prodotto alcuna complicazione (come mi aspettavo) Tuttavia ho identificato il pezzo di codice che sta producendo gli errori. Una spiegazione più dettagliata nel post originale. +1 tra l'altro :) –

Problemi correlati