Visualizzazione catarreri speciali

Ciao Gianni,

vorrei sapere, come faccio a far visualizzare in maniera corretta caratteri come

1) ' (apice)

2) e le vocali accentate (ù,à,ò,è,ì)

GRAZIE

inviato 11 anni fa
noems
X 0 X

Con la funzione htmlentities: echo htmlentities($testo);

comunque non mi risulta che i singoli apici abbiano problemi di visualizzazione. Fammi un esempio che crea problemi.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Quando vado ad inserire questi 2 esami:

1) Sistemi per l'elaborazione dell'Informazione

2) Calcolo delle probabilità e Statistica

tramite form (menù a tendina)

e visualizzo l'elenco di tutti gli esami presenti nel database ottengo, dei "?" al posto dell'apice nel primo caso, e della a accentata.

risposto 11 anni fa
noems
X 0 X

dimmi se usando la funzione htmlentities risolvi il problema delle lettere accentate.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

ho provato così:

            echo htmlentities('<TD>$Campo</TD>'):

ma mi dà il seguente errore (ancora non ho capito bene come incastrare codice HTML in PHP.....):

Parse error: parse error, unexpected ':', expecting ',' or ';' in D:\Universita\Basi di Dati\Progetto Basi di Dati\Progetto 2005-2006\Vis_Piano2.php on line 63

risposto 11 anni fa
noems
X 0 X

:) Hai messo il "due punti" al posto del punto e virgola alla fine dell'istruzione, che però è comunque sbagliata!

prova così:

echo '<TD>' , htmlentities($Campo) , '</TD>';

per risolvere il problema dei singoli apici prova così:

echo '<TD>' , htmlentities($Campo, ENT_QUOTES) , '</TD>';

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Purtoppo sia la prima che la seconda danno lo stesso errore che miu dava prima....

Mi  sto avvilendo.....

 :-[

risposto 11 anni fa
noems
X 0 X

Verifica direttamente il contenuto del database. Controlla se i "'?" sono già presenti lì. In caso contrario riporta l'HTML generato dalla pagina che contiene gli strani caratteri. Non usare htmlentities.

...e non avvilirti!  :nono:

 :bye:

P.S.: inizio a pensare che il problema sia il set di caratteri usato da MySQL

risposto 11 anni fa
Gianni Tomasicchio
modificato 11 anni fa
X 0 X

Innanzi tutto, grazie per l'incoraggiamento MI SERVIVA!!! :)

ho provato a vedere (tramite phpmyadmin) il contenuto della tabella "ESAMI", e già lì gli esami vengono memorizzati nel database con la sostituizione dei simboli speciali detti prima, con il simbolo di ?; Faccio presente che phpmyadmin usa il set di caratteri  "latin1_swedish_ci"; Non ci sono dei stratagemmi per ovviare al problema, anche se non credo venga valutato (dal mio prof.) come un'errore grave.....

risposto 11 anni fa
noems
X 0 X

Prova ad effettuare questa query su tutte le tabelle:

ALTER TABLE nome_tabella DEFAULT CHARACTER SET latin1

e verifica che il set di caratteri sia stato modificato. Poi reinserisci le informazioni nelle tabelle e verifica che le lettere accentate siano state inserite correttamente, direttamente da phpMyAdmin.

L'istruzione htmlentities comunque va utilizzata se si vogliono creare pagine web corrette.

Fammi sapere se funziona.  :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Ho provato a fae così:

richiamo il file "Definizione Tabelle" tramite l'opzione "IMPORT FILES" di phpmyadmin (costruito per rimuovere il db precedente e creare tutte le strutture delle varie tabelle;poi ho fatto 7 query (una per ogni tabella) manualmente del tipo che mi hai suggerito, e il set di caratteri per tutti gli attributi di tipo varchar resta sempre "latin1_swedish..." (per vedere questa cosa guardo cosa c'è in corrispondenza della colonna "COLLATION"); di conseguenza, dopo aver caricato i dati all'interno delle rispettive tabelle (sempre tramite la stessa procedure utilizzata per il file "Definizione Tabelle") è possibile vedere che gli esami hanno sempre lo stesso problema (mi riferisco al carattere ? al posto di quelli che sappiamo). Inoltre la verifica della correttezza degli esami inseriti è stata fatta premendo sul pulsante mostra di phpmyadmin.

risposto 11 anni fa
noems
X 0 X

Che versione di MySQL hai?

P.S.: ho spostato la discussione in "Database"

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Ho la versione 5.0 (quella beta per intenderci). . . .

risposto 11 anni fa
noems
X 0 X

Fai questo esperimento: scaricati il programma SQLYog, la versione gratuita: http://www.webyog.com/ Usa questo programma per inserire i testi con i caratteri accentati e poi verifica sempre con questo programma il contenuto delle tabelle.

Lascia perdere. Esegui queste query e riporta i risultati:

show variables like 'char%'

show create table nome_tabella

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
modificato 11 anni fa
X 0 X

Ecco i risulati della prima istruzione:

Variable_name                                Value

character_set_client                         utf8

character_set_connection                utf8

character_set_database                  latin1

character_set_results                      utf8

character_set_server                      latin1

character_set_system                     utf8

character_sets_dir C:\Programmi\MySQL\MySQL Server 5.0\share\charsets...

 I risultati della seconda sono:

anni       CREATE TABLE `anni` (\n `Cod_E` int(5) NOT NULL,\n `Anno` enum

              ('1','2','3') NOT NULL,\n PRIMARY KEY (`Cod_E`,`Anno`),\n

              CONSTRAINT `anni_ibfk_1` FOREIGN KEY (`Cod_E`) REFERENCES   

              `esami` (`Cod_Esame`) ON DELETE CASCADE ON UPDATE CASCADE\n)

              ENGINE=InnoDB DEFAULT CHARSET=latin1

corsi      CREATE TABLE `corsi` (\n `Cod_Laurea` char(4) NOT NULL,\n 

             `Descrizione` varchar(70) NOT NULL,\n PRIMARY KEY (`Cod_Laurea`)\n)

             ENGINE=InnoDB DEFAULT CHARSET=latin1

esami     CREATE TABLE `esami` (\n `Cod_Esame` int(5) NOT NULL,\n `Titolo`

              varchar(70) NOT NULL,\n `CFU` int(2) NOT NULL,\n

              PRIMARY KEY (`Cod_Esame`)\n) ENGINE=InnoDB DEFAULT                 

              CHARSET=latin1

piani      CREATE TABLE `piani` (\n `Mat` char(10) NOT NULL,\n `Cod_Esame` int

              (5) NOT NULL,\n `Anno` enum('1','2','3') NOT NULL,\n

             `Data` date NOT NULL,\n `Voto` int(2) NOT NULL default '0',\n `Lode`

              enum('S','N') NOT NULL default 'N',\n PRIMARY KEY

              (`Mat`,`Cod_Esame`),\n KEY `Cod_Esame` (`Cod_Esame`),\n

              CONSTRAINT `piani_ibfk_1` FOREIGN KEY (`Mat`) REFERENCES

              `studenti` (`Matricola`) ON DELETE CASCADE ON UPDATE CASCADE,\n 

              CONSTRAINT `piani_ibfk_2` FOREIGN KEY (`Cod_Esame`) REFERENCES

              `esami` (`Cod_Esame`) ON DELETE CASCADE ON UPDATE CASCADE\n)

              ENGINE=InnoDB DEFAULT CHARSET=latin1

prevede     CREATE TABLE `prevede` (\n `Cod_L` char(4) NOT NULL,\n

                  `Cod_Esame` int(5) NOT NULL,\n `Tipo` enum('O','F') NOT NULL

                  default 'O',\n `Previsto` enum('S','N') NOT NULL default 'N',\n

                  `CFU_Tot` int(3) NOT NULL,\n PRIMARY KEY

                  (`Cod_L`,`Cod_Esame`),\n KEY `Cod_Esame` (`Cod_Esame`),\n

                  CONSTRAINT `prevede_ibfk_1` FOREIGN KEY (`Cod_L`)

                  REFERENCES `corsi` (`Cod_Laurea`) ON DELETE CASCADE ON

                  UPDATE CASCADE,\n CONSTRAINT `prevede_ibfk_2` FOREIGN KEY

                  (`Cod_Esame`) REFERENCES `esami` (`Cod_Esame`) ON DELETE

                   CASCADE ON UPDATE CASCADE\n) ENGINE=InnoDB DEFAULT

                  CHARSET=latin1

 propedeutici            CREATE TABLE `propedeutici` (\n `Cod_Esa` int(5) NOT

                                 NULL,\n `Cod_Prop` int(5) NOT NULL,\n PRIMARY KEY

                                 (`Cod_Esa`,`Cod_Prop`),\n KEY `Cod_Prop`

                                 (`Cod_Prop`),\n

                                 CONSTRAINT `propedeutici_ibfk_1` FOREIGN KEY

                                 (`Cod_Esa`) REFERENCES `esami` (`Cod_Esame`) ON

                                 DELETE CASCADE ON UPDATE CASCADE,\n CONSTRAINT

                                 `propedeutici_ibfk_2` FOREIGN KEY (`Cod_Prop`) 

                                 REFERENCES `esami` (`Cod_Esame`) ON DELETE

                                 CASCADE ON UPDATE CASCADE\n) ENGINE=InnoDB

                                 DEFAULT CHARSET=latin1

studenti                    CREATE TABLE `studenti` (\n `Cod_L` char(4) NOT NULL,\n

                                 `Matricola` char(10) NOT NULL,\n `Nome` varchar(20) NOT 

                                  NULL,\n `Cognome` varchar(20) NOT NULL,\n `Data_N`

                                  date NOT NULL,\n `Indirizzo` varchar(50) NOT NULL,\n 

                                  `Citta` varchar(50) NOT NULL,\n `Telefono` varchar(15) 

                                  NOT NULL,\n `Sesso` enum('M','F') NOT NULL default 'M',\n

                                  PRIMARY KEY (`Matricola`),\n KEY `Cod_L` (`Cod_L`),\n

                                  CONSTRAINT `studenti_ibfk_1` FOREIGN KEY (`Cod_L`)

                                  REFERENCES `corsi` (`Cod_Laurea`) ON DELETE CASCADE

                                  ON UPDATE CASCADE\n) ENGINE=InnoDB DEFAULT 

                                  CHARSET=latin1

risposto 11 anni fa
noems
X 0 X

Credo proprio si tratti di un problema di set di caratteri. Prova a riconfigurare l'istanza di MySQL.

Nel menù "avvio" -> programmi -> MySQL -> MySQL Server 5.0 -> MySQL Server Instance Config Wizard

Lancia il programma e seleziona l'opzione "Reconfigure Instance" e procedi fino a che ti chiede il set di caratteri da utilizzare. Seleziona  "Standard Character Set" (la prima opzione) e poi vai avanti fino a che il Wizard riavvia MySQL.

A questo punto esegui nuovamente la query show variables like 'char%' e vedi se per tutte le opzioni viene utilizzato il latin1.

Fammi sapere (e non disperare).  :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Ho lanciato il setup

ma non mi viene chiesto di cambiare il set di caratteri da nessuna parte parte, posso solo modificare le impostazioni come password per root ecc.; cv'è da dire che ho scelto l'installazione standard e non quella dettagliata...

risposto 11 anni fa
noems
X 0 X

Ripeti la procedura effettuando la configurazione dettagliata. Lascia tutte le impostazioni come stanno, tranne il seti di caratteri, da impostare a Standard Character Set.

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Dopo aver seguito la procedure da te indicate,e ricaricato tutte le informazioni, si ha che:

il set di caratteri è latin1_swedish_ci, ma comunque i nomi degli esami rimangono affetti da errore. . . ..

risposto 11 anni fa
noems
X 0 X

Mi riporti l'esito della query show variables like 'char%'

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Certo, scusa hai ragione.....ECCOLI:

Variable_name  Value 

character_set_client utf8

character_set_connection utf8

character_set_database latin1

character_set_results utf8

character_set_server latin1

character_set_system utf8

character_sets_dir C:\Programmi\MySQL\MySQL Server 5.0\share\charsets...

risposto 11 anni fa
noems
X 0 X

Vai nella cartella in cui hai installato MySQL 5 e cerca il file my.ini

Verifica che al suo interno le direttive "default-character-set" (sono 2) siano impostate a "latin1"

Poi conviene fare un test: crea una nuova tabella con dei campo testo tipo:

CREATE TABLE `test` (                     
          `id` int(11) NOT NULL auto_increment,   
          `testo` text,                           
          `caratteri` varchar(128) default NULL,  
          PRIMARY KEY  (`id`)                     
        ) ENGINE=InnoDB DEFAULT CHARSET=latin1

prova ad effettuare egli inserimenti di caratteri speciali.

Io ho usato questo script:

[tt]<?php

//In Locale

$server = "127.0.0.1";

$admin = "root";

$pwd = "****";

$database = "test";

$table = "test";

// connessione a MySQL

$link = mysql_connect($server, $admin, $pwd);

if (!$link) {

   die('Errore nella connessione: ' . mysql_error());

}

// selezione del database

$db_selected = mysql_select_db($database, $link);

if (!$db_selected) {

   die ('Errore nella selezione del DB: ' . mysql_error());

}

// invio query

$query = "INSERT INTO $table

   (testo,caratteri)   VALUES

   ('ùàò éè','ùàò éè')";

$result = mysql_query($query);

if (!$result) {

   die('Errore nella query: ' . mysql_error());

}

$result = mysql_query("SELECT * FROM $table");

echo '<pre>';

while ($tmp = mysql_fetch_assoc($result))

{

   print_r($tmp);

}

echo '</pre>';

?>[/tt]

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Nelle impostazioni del my.ini le 2 variabili sono settate a latin1, e seguendo la procedura da te descritta mi appare questa cosa:

Array
(
    [id] => 1
    [testo] => ùàò éè
    [caratteri] => ùàò éè
)

penso che il risultato sia quello voluto, ma con questo?

risposto 11 anni fa
noems
X 0 X

Ottimo,

così sappiamo che MySQL e PHP parlano correttamene la stessa lingua. A questo punto credo che il problema dipenda dalla lingua dei DB. Prova a ricrearli mettendo "DEFAULT CHARSET=latin1" alla fine della "CREATE TABLE"

 :bye:

P.S.: per gestire MySQL prova SQLYog, versione free.

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

Ho ricaricato la struttura del DB in questa maniera (riporto solo la prima tab)

CREATE TABLE CORSI
(
 Cod_Laurea CHAR(4) NOT NULL,
 Descrizione VARCHAR(70) NOT NULL,
 
 PRIMARY KEY(Cod_Laurea)
) ENGINE=INNODB DEFAULT CHARSET=latin1;

ma già quando vado ad inserire gli esami (tramite file di testo caricato da phpmyadmin) è possibile vedere che compare sempre il carattere "indesiderato" "?"

Il software che mia hai consigliato, sostituisce phpmyadmin?

risposto 11 anni fa
noems
X 0 X

ti dirò di più, questa volta (con la procedura da te dettata) le lettere come "à"

vengono sostituite non più da "?" ma da un quadratino. . . . ..

risposto 11 anni fa
noems
X 0 X

Effettua un "SHOW CREATE TABLE" sulle tabelle sospette e verifica che set di caratteri stanno usando

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

L'ho fatto solo sulla tabella esami (quella è la tabella contenente tutti gli esami)

e il risultato è il seguente:

CREATE TABLE `esami` (\n  `Cod_Esame` int(5) NOT NULL,\n  `Titolo` varchar(70) NOT NULL,\n  `CFU` int(2) NOT NULL,\n  PRIMARY KEY  (`Cod_Esame`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1
risposto 11 anni fa
noems
X 0 X

anche per tutte le altre l'ultima "istruzione" è "DEFAULT CHARSET=latin1"

risposto 11 anni fa
noems
X 0 X

 :dunno:  :wallbash: :lamo: :giveup:  :buck: :crazy: :uglystupid:  :death:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

da quello che vedo mi sembra di capire "MA LASCIA STARE CHE è MEGLIO"

SBAGLIO??   :2funny:

risposto 11 anni fa
noems
X 0 X

No, è che non so cosa suggerirti  :dunno:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

per ora mi interessa risolvere di più l'altro post, questo se riuscirai a trovare una soluzione sarò lieto di provarla. . .  (siamo agli sgoccioli)  :coolsmiley:

risposto 11 anni fa
noems
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda