Erreur java d'accents et d'espaces

amateurjava Messages postés 88 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 12 octobre 2009 - 28 déc. 2007 à 20:10
amateurjava Messages postés 88 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 12 octobre 2009 - 30 déc. 2007 à 15:50
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

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 déc. 2007 à 20:16
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).
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
28 déc. 2007 à 23:35
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 ?
0
amateurjava Messages postés 88 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 12 octobre 2009
29 déc. 2007 à 22:54
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 !!
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
29 déc. 2007 à 23:07
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
amateurjava Messages postés 88 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 12 octobre 2009
29 déc. 2007 à 23:13
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 !!
0
amateurjava Messages postés 88 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 12 octobre 2009
29 déc. 2007 à 23:28
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 !!
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
29 déc. 2007 à 23:35
Sinon, en CSS ça doit être possible... Une petite recherche sur google... Peut-être même qu'il en est question sur AlsaCreations
0
amateurjava Messages postés 88 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 12 octobre 2009
30 déc. 2007 à 00:13
J'ai cherché... j'ai pas trouvé... un petit coup de pouce (je vois pas comment gerer ça en css...)

Faites vous plaisir !!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
30 déc. 2007 à 09:39
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 ?
0
amateurjava Messages postés 88 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 12 octobre 2009
30 déc. 2007 à 11:08
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 !!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
30 déc. 2007 à 11:17
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.
0
amateurjava Messages postés 88 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 12 octobre 2009
30 déc. 2007 à 11:45
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 !!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
30 déc. 2007 à 12:07
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.
0
amateurjava Messages postés 88 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 12 octobre 2009
30 déc. 2007 à 12:13
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 !!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
30 déc. 2007 à 12:27
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.
0
amateurjava Messages postés 88 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 12 octobre 2009
30 déc. 2007 à 12:34
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 !!
0
amateurjava Messages postés 88 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 12 octobre 2009
30 déc. 2007 à 12:42
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 !!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
30 déc. 2007 à 13:40
Non tu n'as pas compris. Avec ton echo, dans le script appelé par Ajax, fais un utf8_decode();
0
amateurjava Messages postés 88 Date d'inscription vendredi 8 octobre 2004 Statut Membre Dernière intervention 12 octobre 2009
30 déc. 2007 à 13:54
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 !!
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
30 déc. 2007 à 14:15
Alors essaye utf8_encode() (je comprendrai jamais rien à ces problèmes d'encodage avec Ajax...)
0
Rejoignez-nous