Erreur java d'accents et d'espaces

Signaler
Messages postés
88
Date d'inscription
vendredi 8 octobre 2004
Statut
Membre
Dernière intervention
12 octobre 2009
-
Messages postés
88
Date d'inscription
vendredi 8 octobre 2004
Statut
Membre
Dernière intervention
12 octobre 2009
-
Bonjour,

j'ai un leger probleme de codage :

J'ai d'un coté une BD mysql et de l'autre un page PHP qui liste des enregistrements de la base.

J'ai crée un script pour faire apparaitre une infobulle lorsque la souris passe sur un élément de la liste .

Le probleme, c'est que le débogage de IE me montre que ce script est ok lorsqu'un enregistrement ne comporte pas d'accent ou d'apostrophe.

Par contre dans le cas contraire il me renvoi des erreur ( ')' attendu)
je précise que le script d'info bulle affiche un texte qui est un concaténation de champs de la base.
ex $contenu=$nom.$prenom.$memo;
et je renvoi $contenu à mon script java.

1ere question : comment debuguer
2eme question : sachant que le champ $memo est de type 'longtext' dans ma base, il y a des retours de chariot qui me générent des erreurs (constante chaine non terminée)
comment débuguer

Dans l'attente,

Faites vous plaisir !!

23 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,
tu parles de java, ou de javascript? Parce que c'est TRES différent.
Sinon, je n'ai pas compris ton problème.
Et pour débugger efficacement du JS, je ne peux que conseiller Firebug sur Fierfox. Je n'ai jamais rien trouvé d'aussi performant sur IE (malheureusement).
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Salut,

A quoi te sert Javascript dans ton histoire ? (et pas Java, donc...)

Sinon, dans ton script PHP tu devrais essayer addslashes() ou stripslashes(), ou un truc dans le genre.
Les retours à la ligne sur Linux ne sont pas les mêmes que sur Windows (et encore différents de Mac) :
- Linux : \n
- Windows : \n\r
- Mac : \r
Faut peut-être en tenir compte dans ton script JS ?
Messages postés
88
Date d'inscription
vendredi 8 octobre 2004
Statut
Membre
Dernière intervention
12 octobre 2009

Merci pour vos reponses...

Je parles de javascript
Pour etre plus clair :

dans ma page php :
$contenu=$sujet."
".$note;
<? echo $sujet;?>

$sujet est un champ varchar d'une base mysql
$note est un champ 'longtext' d'une base  mysql
 
Dans mon js :
function montre(text) {
document.getElementById('curseur').innerHTML = text;
}

le probleme :
Si $sujet ou ou $note ne contient pas d'accent ou de éèàê => pas de pb
sinon erreur
et
si $note contient un retour de chariot => erreur

Comment modifier mon code ??

Faites vous plaisir !!
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
En gros tu utilises Javascript pour afficher uniquement une info bulle ?
Et pourquoi ne pas utilise l'attribut title peut être utilisé avec quasiment toutes les balises html ? Pourquoi mettre du JS quand on peut s'en passer ?
Messages postés
88
Date d'inscription
vendredi 8 octobre 2004
Statut
Membre
Dernière intervention
12 octobre 2009

Je pensais que l'on pouvait afficher plus d'infos dans l'info bulle...

Ce qui apparait dans l'info bulle provient d'une BD....

Avec title, comment faire ?

Faites vous plaisir !!
Messages postés
88
Date d'inscription
vendredi 8 octobre 2004
Statut
Membre
Dernière intervention
12 octobre 2009

Aprés un test, c'est vrai que title peut fonctionner, sauf sur la partie de formatage de l'affichage :
je voudrais voir dans le cadre
$sujet
$note

et non $sujet$note

J'ai essayé de mettre \n mais ça ne marche que sur ie et pas sur firefox...

                                              

Faites vous plaisir !!
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Sinon, en CSS ça doit être possible... Une petite recherche sur google... Peut-être même qu'il en est question sur AlsaCreations
Messages postés
88
Date d'inscription
vendredi 8 octobre 2004
Statut
Membre
Dernière intervention
12 octobre 2009

J'ai cherché... j'ai pas trouvé... un petit coup de pouce (je vois pas comment gerer ça en css...)

Faites vous plaisir !!
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Non, que je sache, on ne peut pas modifier la mise en page d'un attribut title. De plus, sur les différents navigateurs, cet attribut fonctionne différemment. Sur Firefox, il est très limité et en ligne. IE accepte les retours chariots. Mais bon...title est à réserver pour de petits textes (des titres, quoi ;-) ).
Tu as un problème d'encodage : en quoi sont encodés ta base/table/champ et ta page ?
Messages postés
88
Date d'inscription
vendredi 8 octobre 2004
Statut
Membre
Dernière intervention
12 octobre 2009

Ma base Mysql : <dfn title="Europe de l'ouest (multilingue), insensible à la casse">latin1_general_ci
ma page : iso-8859-1

</dfn>
Faites vous plaisir !!
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Attends, je viens de relire tes posts :
$contenu=$sujet."
".$note;
<? echo $sujet;?>

c'est vraiment ce que tu as, exactement, dans ton script ?
J'en doute? Fais voir cette partie exacte de ton script.
Ce serait plutôt :
<?php
$contenu=$sujet."
".$note;
echo ''.$sujet.'

';
?>
et pour les retours chariot :
<?php

$contenu=$sujet."
".$note;

echo ''.$sujet.'


';

?>
Pour les accents, je ne comprends pas, tu ne devrais pas avoir ce problème, SAUF si tu récupères ton contenu via Ajax...? Ajax se sert d'UTF_8. Il faut donc faire un utf8_decode() sur son retour.
Messages postés
88
Date d'inscription
vendredi 8 octobre 2004
Statut
Membre
Dernière intervention
12 octobre 2009

si si , le code est ecrit comme indiqué... ce qui peut expliquer le pb ... je testerais.

C'est vrai que j'utilise ajax pour renvoyer des elements
d'ailleur, j'ai une technique pour reconvertir les retour utf8 ;je fais :
ob_start(); au debut de la page

$buffer=ob_get_clean();
$buffer = utf8_encode($buffer);
echo $buffer;          a la fin et ça m'affiche le page correctement.

Par contre, j'aimerais avoir une solution plus "élégante".

J'ai beau essayer la technique suivante :

function maj(div,requete){   

var xhr_object = null;
 if(window.XMLHttpRequest) // Firefox
          xhr_object = new XMLHttpRequest();
       else if(window.ActiveXObject) // Internet Explorer
          xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
       else { // XMLHttpRequest non supporté par le navigateur
          alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
          return;
       }
    xhr_object.open("POST", requete, true);  
    xhr_object.onreadystatechange = function() {
          if(xhr_object.readyState == 4) {
             window.opener.document.getElementById(div).innerHTML = xhr_object.responseText;   
             }
             
       }
    xhr_object.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');
       xhr_object.send(null);
}

et le résultat n'est pas décodé... c'est pourquoi j'utilise cette technique des buffers.
Où ça bug?

Faites vous plaisir !!
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Déjà, donc, le code html/php montré est syntaxiquement incorrect, donc.
Ensuite, tu dois faire un utf8_decode() dans le script php exécuté par ta requête Ajax afin de retourer de l'iso.
Messages postés
88
Date d'inscription
vendredi 8 octobre 2004
Statut
Membre
Dernière intervention
12 octobre 2009

Je te donnes mon script, je l'ai modifié :
solution finale pour l'infobulle sans js.... qui marche sur ie et ff (géré par une classe tooltip)
et
ma problematique avec ajax

La page php :
<? ob_start();?>
<head>
<link href="css/liste_note.css" rel="stylesheet" type="text/css">
<link href="css/infobulle.css" rel="stylesheet" type="text/css">
<link href="css/note.css" rel="stylesheet" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

<? $today=date('Y-m-d');
include ("connection.php");
$retard=mysql_query("SELECT *,DATE_FORMAT(note_date,'%d-%m')as note_date FROM note WHERE note_date < '$today'");
while ($ret=mysql_fetch_array($retard)) {?>

<? echo $ret["note_date"];?>

<? $note_sujet=$ret["note_sujet"];
$note_contenu=$ret["note_contenu"];
$note_date=$ret["note_date"];
$note_heure=$ret["note_heure"];?>

<? echo substr($ret["note_sujet"],0,21);?><? echo $note_sujet;?>, ----
<? echo $note_contenu;?>, ----
<? echo $note_date." | ".$note_heure;?>

<? }?>

<? $jour=mysql_query("SELECT *,DATE_FORMAT(note_date,'%d-%m-%Y')as note_date FROM note WHERE note_date ='$today' ORDER BY note_heure ASC");
while ($jr=mysql_fetch_array($jour)) {?>

<? echo substr($jr["note_heure"],0,5);?>

<? $note_sujet=$jr["note_sujet"];
$note_contenu=$jr["note_contenu"];
$note_date=$jr["note_date"];
$note_heure=$jr["note_heure"];?>

<? echo substr($note_sujet,0,21);?><? echo $note_sujet;?>, ----
<? echo $note_contenu;?>, ----
<? echo $note_date." | ".$note_heure;?>

<? }?>
<? $buffer=ob_get_clean();
$buffer = utf8_encode($buffer);
echo $buffer;?>

le script ajax je te l'ai donné

le prob leme est le suivant :

lorsque j'affiche la page php, l'encodage en utf8 crée des pbs d'affichage...

lorque j'ajoute une note (appel de la requete ajax d'une autre page) le résultat est ok

J'aimerais donc éviter de passer par le buffer qui me foire l'affichage à l'initialisation...

Faites vous plaisir !!
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Le problème ne vient pas de là, mais du script php appelé par Ajax. Ton buffer ne te sert pas à grand chose ici. C'est dans ce script que tu dois renvoyer de l'iso et non de l'utf8.
Messages postés
88
Date d'inscription
vendredi 8 octobre 2004
Statut
Membre
Dernière intervention
12 octobre 2009

dans le script ajax ?

si je comprend bien : il faut que le fichier php ai un encodage iso?

c'est fait puisque le header est déclaré en iso!

Faites vous plaisir !!
Messages postés
88
Date d'inscription
vendredi 8 octobre 2004
Statut
Membre
Dernière intervention
12 octobre 2009

j'ai enlevé le buffer.
mon script ajax est inchangé
lorsque j'ajoute une note, la maj du div où s'affiche la liste des notes en cours met les éèà en erreur (carres)
si je reactualise la totalité de la page , les caractères en erreur repassent ok

fichu encodage

pourrais tu me donner un exemple, je crois qu'il y a quelque chose qui m'échappe.

Faites vous plaisir !!
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Non tu n'as pas compris. Avec ton echo, dans le script appelé par Ajax, fais un utf8_decode();
Messages postés
88
Date d'inscription
vendredi 8 octobre 2004
Statut
Membre
Dernière intervention
12 octobre 2009

j'ai deja essayé, ça marche pas :

[# Livraison surgelesLivraison
surgeles
3 barquettes
30-12-2007 | 00:00:00]

00:00

[# c'éèàc'éèà
c'éèàâ
30-12-2007 | 00:00:00]

00:00

[# ç'aéèàç'aéèà
c'éèà
30-12-2007 | 00:00:00]

00:00

[# c'éàèc'éàè
c'éèà
30-12-2007 | 00:00:00]

00:00

[# c'é bon ou p'ac'é bon ou
p'a
c'é bon ou p'a
30-12-2007 | 00:00:00]

00:00

[# c'éèàc'éèà
c'éèà
30-12-2007 | 00:00:00]

00:00

[# c'éàèc'éàè

30-12-2007 |
00:00:00]

00:00

[# c'éèàc'éèà
c'éèà
30-12-2007 | 00:00:00]

00:00

[# ç'aéèàç'aéèà
c'éèà
30-12-2007 | 00:00:00]

00:00

[# c'éèàc'éèà
c'éà
30-12-2007 | 00:00:00]

00:00

[# c'eéàc'eéà
c'éà
30-12-2007 | 00:00:00]

Bizarre..

[# ]

Faites vous plaisir !!
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Alors essaye utf8_encode() (je comprendrai jamais rien à ces problèmes d'encodage avec Ajax...)