Le japonais c galère

Résolu/Fermé
@xi@g@me - 30 mai 2008 à 16:40
 @xi@g@me - 4 juin 2008 à 12:41
Bonjour,

Je suis en train de tenter de faire une page web contenant du japonais, le fichier est enregistré au format utf-8, j'ai un charset utf-8, mais les caractères se transforment en un point d'interrogation quand j'affiche la page (parfaitement lisibles avec notepad++)

De plus, j'ai remarqué que même avec le header, mozilla pense que c'est du charset 8859-1.

J'ai réussi a le mettre en UTF8 mais malheureusement j'ai toujours mes "?" et en plus de cela tous mes accents sont représentés par le fameux "?" dans un losange noir...


quelqu'un peut m'aider???

merci d'avance,
@xi@

24 réponses

croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
30 mai 2008 à 19:35
As-tu une balise du genre <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
0
oui j'ai bien cette balise dans la page....

voici le source code complet :

<?php session_start(); include('core.php')?>
<html>
<head>
<title>@xi@g@me studios</title>
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script src="core.js" type="text/javascript"></script>
</head>
<body id='main'>
<p><center>
<img src='images/logo.png' alt='@xi@g@me studios'/>
<br/><br/><br/><br/><br/>
<div id='tabMain'>
<br/>
[ choisissez votre langue | choose your language ]
<br/><br/><br/>
<table>
<td>
<a href='french/home.php'><img style='border : 1px solid black' src='images/francais.gif' alt='francais'/></a>
</td>
<td width=30>
</td>
<td>
<a href='english/home.php'><img style='border : 1px solid black' src='images/english.gif' alt='english'/></a>
</td>
</table>
<br/>
Nihongo deha, ima dekimasen. mou shibaraku omachi kudasai.
<br/>
<br/>
</div>
</center></p>
</body>
</html>


merci
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
30 mai 2008 à 21:07
Désolé, mais je vois charset=iso-8859-1 dans la page envoyée
0
lol oui croy, je suis vraiment désolé, je me suis trompé de page, je t'envoie la bonne maintenant :

<?php session_start(); include('../core.php')?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>@xi@g@me studios</title>
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="../design.css" />
<script src="../core.js" type="text/javascript"></script>
</head>
<body id='body'>
<p><center>
<div>
<img src='../images/logo.png' alt='logo de @XI@G@ME Studios' width=463 height=157/>
<h1>Bienvenue sur le site officiel @xi@g@me Studios</h1>
<h3>Ce site est actuellement en construction, nous nous excusons du désagrément encouru.</h3>
<h3>日本語では、今できません。も暫くお待ち下さい。</h3>
<!--
<h3>Cette page contient tout ce qu'il y a de nouveau depuis le début, ainsi qu'un lien vers le site en test</h3>
<h2 align="center">Bonne visite</h2>
-->
<hr/><br/>
</div>
<div>
<?php
// ici, on affiche les news une par une
// première étape, récupération des news
mysql_connect($mysql_srv, $mysql_usr, $mysql_psw);
mysql_select_db($mysql_db);
// on récupère le nom de tous les utilisateurs que l'on met dans un tableau pour les balises BBcode [USER]/USER
$cpt = 0; // ici on doit passer par un compteur pour incrꮥnter la taille du tableau car on ne peut pas crꦲ une case vide (on aura besoin de regexp plus tard, et cette case n'en génèrera pas => plantage de preg_replace())
$ress = mysql_query('SELECT identifiant FROM users');
while ($ligne = mysql_fetch_array($ress))
{
$tab_users[$cpt] = $ligne['identifiant'];
$cpt++;
}
// on remplace ces données en expressions régulières, afin de ne changer que les balises [USER] contenant des utilisateurs de la table en lien. Les autres donneront le nom de l'utilisateur sans lien.
// on met les regexp dans un nouveau tableau
$tab_users_regexp = preg_replace ('#([a-zA-Z0-9]*)(\.)([a-zA-Z0-9]*)#', '#\\[USER\\]($1\\.$3)\\/USER\\#isU', $tab_users);
// on regarde combien il y a de news et on en déduit le nombre de pages
$ress = mysql_query("SELECT COUNT(*) AS nb FROM news");
$nb_news = mysql_fetch_array($ress);
$nb_pages = (int)(($nb_news['nb']-1) / 5 + 1);

if (isset($_GET['page']))// si on indique une page prꤩse, on affiche cette page
{
if (ctype_xdigit($_GET['page'])) // si on an bien entré un nombre (sécurité)
if ($_GET['page'] > 0 && $_GET['page'] <= $nb_pages) $page = $_GET['page']; else $page = 1; // petit test pour vérfier que le nombre est correct
else // dans le cas d'une tentative de piratage, on prend par défaut la première page
$page = 1;
}
else // sinon on prend la page 1 par défaut
$page = 1;
// on récupère les données
$ress=mysql_query("SELECT titre, contenu, timestamp FROM news ORDER BY id DESC LIMIT ".(0+($page-1)*5).", 5");
// on boucle pour récupérer toutes les news
$cpt = 0; // utilisation d'un compteur pour créer la table à la première ligne
while ($ligne = mysql_fetch_array($ress))
{
$cpt++; // incrémentation de cpt à chaque boucle
if ($cpt == 1) // premier passage
echo "<table class=\"news\">";
// affichage de la news
echo "<tr><td class=\"news\">";
echo "le ".date("d/m/Y ࡈ\hi", $ligne['timestamp'])." : ";
echo "<span class=\"news_titre\">".$ligne['titre']."<br/><br/></span>";
$contenu = nl2br(stripslashes($ligne['contenu']));
// $contenu = preg_replace($tab_users_regexp, '<a href="mailto:$1@dga.defense.gouv.fr">$1</a>', $contenu);
// $contenu = preg_replace('#\[USER\](.*)\/USER\#isU', '$1', $contenu);
echo "<div class=\"news_contenu\">".$contenu."</div>";
echo "</td></tr>";
}
if ($cpt > 0) // un tableau a 굩 crꩊ echo "</table>";
// on fait des liens vers les autres pages
if ($nb_pages > 1) // si il y a plus d'une page (on va se reservir de $cpt (pourquoi pas???)
{
echo "<span class=\"center\">aller ࡬a page :";
// on fait comme si il y avait un grand nombre de pages, et on bloque toutes les boucles avec un test cpt <= nb_pages
// affichage des 3 premières pages
for ($cpt=1; $cpt<4 && $cpt<=$nb_pages; $cpt++)
{
if ($cpt == $page) // si le compteur est sur la page courante, on ne fait pas le lien
echo " ".$cpt." ";
else // on fait le lien
echo "<a class=\"no_u\" href=\"index~fr.php?page=".$cpt."\"> ".$cpt." </a>";
}
if ($page > 5 && $nb_pages > 6) echo " ... "; // si la page en cours est à 6 ou plus et qu'il y a au moins 7 pages
// affichage des pages du milieu
if ($page > 2) // si la page est au moins à 3, il y aura minimum le 4 à afficher
{
for ($cpt = $page-1; $cpt<=$page+1 && $cpt<=$nb_pages; $cpt++) // on va entre la page immédiatement inférieure à la page courante jusqu'à la page immédiatement suppérieure
{
if ($cpt > 3 && $cpt < $nb_pages-2) // page non encore mise ou non encore prévue
{
if ($cpt == $page) // si le compteur est sur la page courante, on ne fait pas le lien
echo " ".$cpt." ";
else // on fait le lien
echo "<a class=\"no_u\" href=\"index~fr.php?page=".$cpt."\"> ".$cpt." </a>";
}
}
}
if ($page < $nb_pages-4 && $nb_pages > 6) echo " ... "; // si la page en cours est à nombre_de_pages - 4 ou moins et qu'il y a au moins 7 pages
// affichage des 3 dernières pages
for ($cpt = $nb_pages-2; $cpt<=$nb_pages; $cpt++)
{
if ($cpt > 3) // si on est au delà de 3 pages alors on affiche
{
if ($cpt == $page) // si le compteur est sur la page courante, on ne fait pas le lien
echo " ".$cpt." ";
else // on fait le lien
echo "<a class=\"no_u\" href=\"index~fr.php?page=".$cpt."\"> ".$cpt." </a>";
}
}
echo "</span>";
}
mysql_close();
?>
<a href="../admin/admin_index.php"><br/>administration</a>
</div>
</center></p>
</body>
</html>








En haut, tu as le japonais écrit qui s'affiche correctement... le codage de ce fichier est UTF-8 selon notepad++

encore désolé de m'être trompé...
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
31 mai 2008 à 09:33
Essaye de ne prendre que le début de ta page (depuis <html> et jusque le <?php suivant non compris) : je viens de le faire et ça fonctionne.

Est-ce-que ça marche pour toi ?
0
oui, cela marche comme ça en faisant une page html...
mozilla reconnait le format UTF-8 et les caractères japonais sont bien affichés....

c'est le PHP qui est foireux alors?
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
31 mai 2008 à 12:33
Non ça doit marcher sans pb avec PHP.

Qu'est-ce-qu'il y a dans core.php ?
0

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

Posez votre question
il n'y a que des fonctions qui ne sont pas appelées ici...

en fait j'ai développé un site web dans mon stage a paris l'an dernier et j'ai récupéré le système de news pour faire mon nouveau site. Je n'ai pas encore nettoyé les fonctions dont je n'ai pas besoin

enfin voilà son contenu

<?php include ('mysql.php');
//// fichier core PHP ////
// contient l'ensemble des fonctions et variables globales du site
// inclusion obligatoire de mysql.php dans chaque fonction utilisant mysql

/* //// liste des fonctions dans l'ordre puis explication générale
- func_init -> initialisation générale (créée le menu, les pop_ups pour les fichiers si demandé, le journal si demandé)
- have_right_self -> définit si l'utilisateur courant possède le droit passé en argument ou non
- have_right_pr_more_self -> définit si l'utilisateur courant possède le droit passé en argument ou un droit qui lui est supérieur
- is manager -> définit si l'utilisateur courant est un manager ou l'administrateur du site
- have_right_user -> définit si l'utilisateur dont les droits sont passés en argument possède le droit spécifié
- have_right_on_user -> définit si l'utilisateur à la possibilité de modifier le droit spécifié à l'utilisateur dont les droits sont passés en argument
- have_right_on_user_s -> même chose, sauf que l'on ne passe pas les droits de l'utilisateur ciblé en arguments (ceci peut permettre à un gestionnaire tricheur de modifier les droits d'écriture de l'administrateur, mais sans danger)
- get_rights_self -> renvoie un tableau contenant l'ensemble des droits de l'utilisateur courant
- get_rights_user -> renvoie un tableau contenant l'ensemble des droits de l'utilisateur passé en arguments

- suivi -> permet de rajouter une information dans la table de suivi des actions

- determine_right -> détermine les droits nécessaires pour le fichier passé en argument (pour les tests ultimes dans le fichier add_file.php)

- get_file_tabs -> créée un tableau contenant les 3 tableaux $codes, $files et $coms contenant respectivement la liste des codes, des fichiers et de commentaires, récupérés par mysql dans la variable passée en argument.
- make_file -> crée une case pour le fichier spécifié avec les droits passés en argument. Le tableau passé en argument contient les trois tablueaux $codes, $files et $coms. Ce tableau est généré par la fonction get_file_tabs.
-> le flag ajax, permet d'indiquer si la page appelante est elle-même appelée par AJAX ou non. Cela permet de gérer différemment les commentaires (cf commentaires fonction)
- make_block -> crée un bloc de fichiers (3 cases par ligne) et prend les mêmes arguments que make_file, avec à la place de $nom l'argument $type. Le drapeau ajax fonctionne toujours de la même façon
- get_new_name -> génère un nouveau nom de fichier à partir du type envoyé
//// */

//!!\\ ATTENTION !!! Ces fonctions ne doivent être lancées que entre des appels mysql_connect et mysql_close()!!!

// vérifie si l'utilisateur enregistré possède le droit demandé
function have_right_self($section, $droit)
{
if (!isset($_SESSION['identifiant']))
return false;
$tab['section'] = $section;
$tab['droit'] = $droit;
if (in_array($tab, $_SESSION['droits']))
{
return true;
}
else
return false;
}

// idem que plus haut mais véréfie aussi les droits au dessus
function have_right_or_more_self($section, $droit)
{
if (!isset($_SESSION['identifiant']))
return false;
$tab['section'] = $section;
$tab['droit'] = $droit;
if (in_array($tab, $_SESSION['droits']))
{
return true;
}
if ($droit != 'gestionnaire')
{
$tab['droit'] = 'gestionnaire';
if (in_array($tab, $_SESSION['droits']))
return true;
}
$tab['section'] = 'admin';
$tab['droit'] = 'gestionnaire';
if (in_array($tab, $_SESSION['droits']))
return true;
return false;
}

// vérifie si on a le niveau hiérarchique envoyé ou plus
function is_manager()
{
if (!isset($_SESSION['identifiant']))
return false;
foreach ($_SESSION['droits'] as $index => $code)
{
if ($code['droit'] == 'gestionnaire')
{;
return true;
}
}
return true;
}

// vérifie si le tableau de droits passé en argument contient le droit demandé
function have_right_user($section, $droit, $tableau)
{
if (!isset($_SESSION['identifiant']))
return false;
$tab['section'] = $section;
$tab['droit'] = $droit;
if (in_array($tab, $tableau))
{
return true;
}
else
return false;
}

// permet de voir si on peut modifier un droit de l'utilisateur dont les droits sont passée en argument
function have_right_on_user($section, $droit, $tableau)
{
if (!isset($_SESSION['identifiant']))
return false;
if (have_right_self('admin', 'gestionnaire'))
return true;
if ($droit == 'gestionnaire')
return false;
if (have_right_self($section, 'gestionnaire') && !have_right_user('admin', 'gestionnaire', $tableau))
return true;
return false;
}

// idem que plus haut, mais on n'envoie pas les droits de l'utilisateur en argument : n'empêche pas la modification de droits d'écriture de l'administrateur si on essaie de tricher (mais cela est sans danger)
function have_right_on_user_s($section, $droit)
{
if (!isset($_SESSION['identifiant']))
return false;
if (have_right_self('admin', 'gestionnaire'))
return true;
if ($droit == 'gestionnaire')
return false;
if (have_right_self($section, 'gestionnaire'))
return true;
return false;
}

// renvoie un tableau contenant l'ensemble des droits de l'utilisateur connecté
function get_rights_self()
{
include('mysql.php'); // données mysql
if (!isset($_SESSION['identifiant']))
return false;
mysql_connect($mysql_srv, $mysql_usr, $mysql_psw);
mysql_select_db($mysql_db);
$ress = mysql_query('SELECT * FROM users WHERE identifiant="'.$_SESSION['identifiant'].'"');
$ligne = mysql_fetch_array($ress);
if (!$ligne)
{
return false;
}
$cpt = 0;
while (key_exists('droits'.$cpt, $ligne))
{
$droits[$cpt] = $ligne['droits'.$cpt];
$cpt++;
}
$cpt = 0;
$ress = mysql_query('SELECT * FROM droits');
while ($ligne = mysql_fetch_array($ress))
{
if ($droits[$ligne['entier']] & pow(2, $ligne['puissance']))
{
$tableau[$cpt]['section'] = $ligne['section'];
$tableau[$cpt]['droit'] = $ligne['droit'];
$cpt++;
}
}
$tableau[$cpt]['section'] = 'EOF';
$tableau[$cpt]['droit'] = 'EOF';
return $tableau;
}

// renvoie un tableau contenant l'ensemble des droits de l'utilisateur passé en paramètres
function get_rights_user($identifiant)
{
include('mysql.php'); // données mysql
if (!isset($_SESSION['identifiant']))
return false;
mysql_connect($mysql_srv, $mysql_usr, $mysql_psw);
mysql_select_db($mysql_db);
$ress = mysql_query('SELECT * FROM users WHERE identifiant="'.$identifiant.'"');
$ligne = mysql_fetch_array($ress);
if (!$ligne)
{
return false;
}
$cpt = 0;
while (key_exists('droits'.$cpt, $ligne))
{
$droits[$cpt] = $ligne['droits'.$cpt];
$cpt++;
}
$cpt = 0;
$ress = mysql_query('SELECT * FROM droits');
while ($ligne = mysql_fetch_array($ress))
{
if ($droits[$ligne['entier']] & pow(2, $ligne['puissance']))
{
$tableau[$cpt]['section'] = $ligne['section'];
$tableau[$cpt]['droit'] = $ligne['droit'];
$cpt++;
}
}
$tableau[$cpt]['section'] = 'EOF';
$tableau[$cpt]['droit'] = 'EOF';
return $tableau;
}





// ajout d'un enregistrement dans la table suivi (ATTENTION : n'appeler cette fonction que entre une fonction mysql_connect et une fonction mysql_close!!!)
function suivi($nature, $code)
{
include('mysql.php'); // données mysql
mysql_connect($mysql_srv, $mysql_usr, $mysql_psw);
mysql_select_db($mysql_db);
mysql_query('INSERT into suivi VALUES ("", "'.$_SESSION['identifiant'].'", "'.time().'", "'.$nature.'", "'.$code.'")');
$ress = mysql_query('SELECT COUNT(*) AS nombre FROM suivi');
$ligne=mysql_fetch_array($ress);
if ($ligne['nombre'] > 1000)
{
$nombre = $ligne['nombre']-1000;
mysql_query('DELETE FROM suivi ORDER BY id_modif LIMIT '.$nombre);
}
}





// détermine le droit nécessaire pour effectuer un opération sur un fichier, en fonction de son nom de code
// résultat retourné sous la forme d'un tableau avec les index UM et metier.
// si impossibilité de calculer des droits, UM et metier seront vides.
function determine_right($code)
{
include ("mysql.php");
mysql_connect($mysql_srv, $mysql_usr, $mysql_psw);
mysql_select_db($mysql_db);

// on retrouve le droit que l'on met dans un tableau
if (preg_match('#^annee#', $_POST['code']))
{
$tab['UM'] = 'SRTS';
$tab['metier'] = 'ecrivain';
}
else if (preg_match("#^PEA#", $_POST['code']))
{
$num1 = substr($_POST['code'], 3, 2);
$num2 = substr($_POST['code'], 5, 2);
$num3 = substr($_POST['code'], 7, 2);
$ress = mysql_query('SELECT UM, metier FROM pea WHERE annee="'.$num1.'" AND metiern="'.$num2.'" AND numero="'.$num3.'"') or die (mysql_error());
$ligne = mysql_fetch_array($ress);
if (!$ligne)
{
$tab['UM'] = '';
$tab['metier'] = 'erreur : ce PEA n\'existe pas';
}
else
{
$tab['UM'] = $ligne['UM'];
$tab['metier'] = $ligne['metier'];
}
}
else
{
$tab['UM'] = '';
$tab['metier'] = 'erreur : format de fichier non valide : impossible de déterminer les droits';
}
return $tab;
}





// créée les 3 tablueax $codes, $files et $coms à partir de la réponse mysql passée en argument.
function get_files_tabs($ress)
{
$cpt = 0;
while ($ligne = mysql_fetch_array($ress))
{
$codes[$cpt] = $ligne['code'];
$files[$cpt] = $ligne['nom_reel'];
$coms[$cpt] = $ligne['commentaire'];
$cpt++;
}
$codes[$cpt] = 'fin';
$files[$cpt] = 'fin';
$coms[$cpt] = 'fin';

// création du tableau final et renvoi.
$tab['codes'] = $codes;
$tab['files'] = $files;
$tab['coms'] = $coms;
return $tab;
}

// créée une case pour le fichier spécifié avec les droits passés en arguments
// nom est le code du fichier
// UM et metier représentent les droits
// info contient codes, files et coms
// ajax est un flag qui indique la méthode à utiliser pour les commentaires :
// -> true indique que les commentaires seront placés dans un tableau (par commentaire, index 'code' pour le code, et 'comm' pour le commentaire) qui sera retourné par la fonction
// -> false indique que PHP va générer du code javascript qui va ajouter les commentaires
// ce drapeau est ajouté, car on s'apperçoit qu'une page appelée avec AJAX ne peut pas utiliser de code javascript directement (les balises <script></script> ne fonctionnent pas)
// ainsi si on retourne le tableau des commentaires, PHP pourra renvoyer le contenu dans le texte, séparé de la page avec '<::>' ce qui permettra à ajax de récupérer ces données (avec un split)
// et d'ajouter les commentairers 'manuellement'. (dans la page appelante de la page AJAX, utiliser split(new RegExp('<::>', 'g'). Afficher reponse[0], et traiter réponse[1] avec la fonction JS garbage_comments())
function make_file($nom, $UM, $metier, $info, $ajax)
{
if ($ajax) $nb_comments = 0;
// si autorisation d'écriture
if (have_right_or_more_self($UM, $metier))
{
echo '<td width=200 id="'.$nom.'" class="bor" align=center onmouseover=\'javascript:add_file_options("'.$nom.'", "");\' onmouseout=\'javascript:menu_reset();\'>';
}
else
echo '<td width=200 class="bor" id="'.$nom.'" align=center>';
// si fichier présent
if (in_array($nom, $info['codes']) && $info['files'][array_search($nom, $info['codes'])] != '')
{
if (!preg_match('#\.#', $info['files'][array_search($nom, $info['codes'])])) echo '(L) ';
echo '<a href="dl.php?file_code='.$nom.'">';
$ext = substr(strchr($info['files'][array_search($nom, $info['codes'])], "."), 1);
if (file_exists('images/'.$ext.'.bmp'))
echo '<img src="images/'.$ext.'.bmp" /><br/>';
echo htmlentities($info['files'][array_search($nom, $info['codes'])]).'</a>';
}
else
echo 'n/a';
echo '<br/>';
if (in_array($nom, $info['codes']) && $info['coms'][array_search($nom, $info['codes'])] != '')
{
echo '<span onmouseover="start_comment(\''.$nom.'\');" onmouseout="stop_comment();">*</span>';
if (!$ajax)
{
echo '<script type="text/javascript"><!--
add_comment(\''.$nom.'\', \''.$info['coms'][array_search($nom, $info['codes'])].'\');
//--></script>';
}
else
{
$tab_comments[$nb_comments]['code'] = $nom;
$tab_comments[$nb_comments]['comm'] = $info['coms'][array_search($nom, $info['codes'])];
$nb_comments++;
}
}
else
{
if (!$ajax)
{
echo '<script type="text/javascript"><!--
add_comment(\''.$nom.'\', \'\');
//--></script>';
}
else
{
$tab_comments[$nb_comments]['code'] = $nom;
$tab_comments[$nb_comments]['comm'] = '';
$nb_comments++;
}
}
echo '</td>';
if ($ajax) return $tab_comments;
}

// même principe que la fonction du dessus, à la diférence près que on traite un bloc, ici. L'agument $nom est remplacé par l'argument $type qui est le nom de code du bloc de la forme 'fichiers/' + nom général des fichiers (sans le nombre à la fin)
function make_block($type, $UM, $metier, $info, $ajax)
{
echo '<span id="'.$type.'">';
echo '<table><tr height=55>';
$nb_cols = 0; // nombre de colones : permet de sauter une ligne toutes les 3 colones
$nb_fichs = 0; // nombre de documents déjà existants
$reg = substr($type, 9); // enlèvre 'fichiers/' pour la génération de l'expression régulière pour aller piocher les fichiers
foreach($info['codes'] as $valeur)
{
if (preg_match(addslashes('#^'.$reg.'[0-9]+$#'), $valeur))
{
$fichiers[$nb_fichs] = $valeur;
$nb_fichs++;
}
}
if ($nb_fichs > 0)
{
foreach ($fichiers as $nom)
{
// si fichier présent
if (in_array($nom, $info['codes']) && ($info['files'][array_search($nom, $info['codes'])] != '' || $info['coms'][array_search($nom, $info['codes'])] != ''))
{
// si autorisation d'écriture
if (have_right_or_more_self($UM, $metier))
echo '<td width=200 id="'.$nom.'" class="bor" align=center onmouseover=\'javascript:add_file_options("'.$nom.'", "'.$type.'");\' onmouseout=\'javascript:menu_reset();\'>';
else
echo '<td width=200 class="bor" id="'.$nom.'" align=center>';
// si fichier présent
if (in_array($nom, $info['codes']) && $files[array_search($nom, $info['codes'])] != '')
{
if (!preg_match('#\.#', $info['files'][array_search($nom, $info['codes'])])) echo '(L) ';
echo '<a href="dl.php?file_code='.$nom.'">';
$ext = substr(strchr($info['files'][array_search($nom, $info['codes'])], "."), 1);
if (file_exists('images/'.$ext.'.bmp'))
echo '<img src="images/'.$ext.'.bmp" /><br/>';
echo htmlentities($info['files'][array_search($nom, $info['codes'])]).'</a>';
}
else
echo 'n/a';
echo '<br/>';
if (in_array($nom, $info['codes']) && $info['coms'][array_search($nom, $info['codes'])] != '')
{
echo '<span onmouseover="start_comment(\''.$nom.'\');" onmouseout="stop_comment();">*</span>';
if (!$ajax)
{
echo '<script type="text/javascript"><!--
add_comment(\''.$nom.'\', \''.$info['coms'][array_search($nom, $info['codes'])].'\');
//--></script>';
}
else
{
$tab_comments[$nb_comments]['code'] = $nom;
$tab_comments[$nb_comments]['comm'] = $info['coms'][array_search($nom, $info['codes'])];
$nb_comments++;
}
}
else
{
if (!$ajax)
{
echo '<script type="text/javascript"><!--
add_comment(\''.$nom.'\', \'\');
//--></script>';
}
else
{
$tab_comments[$nb_comments]['code'] = $nom;
$tab_comments[$nb_comments]['comm'] = '';
$nb_comments++;
}
}
echo '</td>';
$nb_cols++;
if ($nb_cols == 3)
{
$nb_cols = 0;
echo '</tr><tr height=55>';
}
}
}
}
// génération d'un nouveau nom pour un nouveau fichier
$nom = get_new_name($type);
if (have_right_or_more_self($UM, $metier))
{
echo '<td align=center id='.$nom.' class="bor" width=200 onmouseover=\'javascript:add_file_options("'.$nom.'", "'.$type.'");\' onmouseout=\'javascript:menu_reset();\'>nouveau fichier</td>';
}
echo '</tr></table></span>';
echo '</span>';
}

// renvoie un nouveau nom de fichier à partir du type envoyé
function get_new_name($type)
{
include ("mysql.php");
$type = substr($type, 9); // pour enlever 'fichiers/'
mysql_connect($mysql_srv, $mysql_usr, $mysql_psw);
mysql_select_db($mysql_db);
if (preg_match ('#^annee(19|20)[0-9]{2}\/comEx[0-9]+$#', $type))
{
$new_name_base = 'power';
$length = 5;
}
else if (preg_match ('#^PEA[0-9]{6}$#', $type))
{
$new_name_base = 'CR_suivi';
$length = 8;
}
$ress = mysql_query('SELECT code FROM files WHERE code REGEXP "'.$type.'/'.$new_name_base.'"');
$new_name = $new_name_base.'0';
$cpt = 0;
while ($ligne = mysql_fetch_array($ress))
{
$tab['chiffres'][$cpt] = 0;
$tab['codes'][$cpt] = $ligne['code'];
$cpt++;
}
if (isset($tab['codes'][0]))
{
for ($nombre = 0; $nombre < count($tab['chiffres']); $nombre++)
{
$chiffre = substr($tab['codes'][$nombre], strrpos($tab['codes'][$nombre], $new_name_base)+$length);
if ( $chiffre < count($tab['chiffres']))
$tab['chiffres'][$nombre] = 1;
}
$cpt = 0;
while ($cpt < count($tab['chiffres']) && $tab['chiffres'][$cpt] == 1)
{
$cpt++;
}
$new_name = $new_name_base.$cpt;
}
return $type.'/'.$new_name;
}


et mysql.php contient juste les variables pour se connecter a la bdd
0
je pense tout simplement que c'est la configuration du serveur qui n'est pas bonne...; y'a t'il moyen de dire a apache qu'on veut de l'UTF 8?


(en PHP quand je fais code source de la page je vois aussi des '?')
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
31 mai 2008 à 18:33
Je ne vois pas commet ca pourrait être un pb de config Apache puisque ca marche quand tu supprime la première ligne.

Décortique bien ton fichier inclus (et mysql.php) : je te recommande de mieux le formatter pour mieux voir la structure des blocs logiques.

ne autre méthode serait de regarder le code source de la page générée.
0
oui, j'ai regardé le code source de la page générée, et je vois des "?" à la place des caractères japonais, alors que j'ai bien les caractères japonais quand je ne passes pas par le générateur php (pages html). De plus, en regardant les propriétés d'une page générée avec php, je m'aperçois qu'elle est en iso-8859-1 alors que j'ai fait un charset=utf-8;. Pour une page html, les propriétés confirment qu'elle est en utf-8.
Je ne vois pas d'autres explications que apache génère du iso8859-1...
J'ai aussi essayé la commande header avec php pour focer le nabigateur a du utf-8 : résultat, la page étant générée en iso8859-1, non seulement je n'ai pas les caractères japonais, mais en plus de cela tous mes accents sont foireux (sortes de caractères chinois qui bouffent les 2 ou 3 caractères d'après)
0
je ne peux pas éditer, car je ne suis pas inscrit sur le forum, je poste en invité, dsl....

je voulais rajouter que mes fichiers sont bien formatés, mais pour une raison que j'ignore quand je les poste sur le forum les tabulations disparaissent....
0
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46
1 juin 2008 à 02:52
pour garder ton texte ds la mise en forme que tu souhaite ..
me le entre les balise code ^^
0
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46 > Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009
1 juin 2008 à 03:04
euh chez moi j'ai mis ta page en iso-8859-15
et mis a part mon notpad qui ne comprends pas les caracteres asiat d'origine,
en les remplacant par leur code ascii ca passe niquel ^^
&#26085;&#26412;&#35486;&#12391;&#12399;&#12289;&#20170;&#12391;&#12365;&#1241;­4;&#12379;&#12435;&#12290;&#12418;&#26283;&#12367;&#12362;&#24453;&#12385;&#19979;&#12373;­&#12356;
donne:
日本語では、今できә­4;せん。も暫くお待ち下さ­い
0
@xi@g@me > Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009
1 juin 2008 à 06:48
peux-tu me donner un exemple avec les balises code?

je connais la méthode qui consiste a remplacer les kanjis par le code correspondant, mais si je peux éviter d'avoir a le faire je vais gagner beaucoup de temps.... parce que je vais devoir écrire des pages entières de japonais et même en mettre dans ma base de données...
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
1 juin 2008 à 09:27
Les balises code dont il est fait mention ci-dessus concernent ce forum uniquement : place le code que tu veux communiquer entre
 et 
et les tabulations seront conservées.

Pour le sujet principal de ce fil de discussion, nous sommes arrivés au point où le pb doit venir de core.php (et mysql.php qui est appelé également) : renvoi nous ces deux fichiers (entre
 et 
pour la lisibilité).
0
ah ok j'avais pas saisi qu'il parlait de balises BB, au temps pour moi

perso je ne vois pas comment core.php pourrait faire planter la page, étant donné que je n'utilise ici aucune fonction de ce fichier... enfin bon voilà



mysql.php (n'essayez pas les codes, je les ai changés lol)

[code]
<?php
$mysql_srv = 'specimen'; // nom du serveur pour mysql
$mysql_usr = 'specimen'; // nom d'utilisateur
$mysql_psw = 'specimen'; // mot de passe à utiliser

$mysql_db = 'specimen'; // nom de la base de données
?>
[/code]

[code]
<?php include ('mysql.php');
//// fichier core PHP ////
// contient l'ensemble des fonctions et variables globales du site
// inclusion obligatoire de mysql.php dans chaque fonction utilisant mysql

/* //// liste des fonctions dans l'ordre puis explication générale
- func_init -> initialisation générale (créée le menu, les pop_ups pour les fichiers si demandé, le journal si demandé)
- have_right_self -> définit si l'utilisateur courant possède le droit passé en argument ou non
- have_right_pr_more_self -> définit si l'utilisateur courant possède le droit passé en argument ou un droit qui lui est supérieur
- is manager -> définit si l'utilisateur courant est un manager ou l'administrateur du site
- have_right_user -> définit si l'utilisateur dont les droits sont passés en argument possède le droit spécifié
- have_right_on_user -> définit si l'utilisateur à la possibilité de modifier le droit spécifié à l'utilisateur dont les droits sont passés en argument
- have_right_on_user_s -> même chose, sauf que l'on ne passe pas les droits de l'utilisateur ciblé en arguments (ceci peut permettre à un gestionnaire tricheur de modifier les droits d'écriture de l'administrateur, mais sans danger)
- get_rights_self -> renvoie un tableau contenant l'ensemble des droits de l'utilisateur courant
- get_rights_user -> renvoie un tableau contenant l'ensemble des droits de l'utilisateur passé en arguments

- suivi -> permet de rajouter une information dans la table de suivi des actions

- determine_right -> détermine les droits nécessaires pour le fichier passé en argument (pour les tests ultimes dans le fichier add_file.php)

- get_file_tabs -> créée un tableau contenant les 3 tableaux $codes, $files et $coms contenant respectivement la liste des codes, des fichiers et de commentaires, récupérés par mysql dans la variable passée en argument.
- make_file -> crée une case pour le fichier spécifié avec les droits passés en argument. Le tableau passé en argument contient les trois tablueaux $codes, $files et $coms. Ce tableau est généré par la fonction get_file_tabs.
-> le flag ajax, permet d'indiquer si la page appelante est elle-même appelée par AJAX ou non. Cela permet de gérer différemment les commentaires (cf commentaires fonction)
- make_block -> crée un bloc de fichiers (3 cases par ligne) et prend les mêmes arguments que make_file, avec à la place de $nom l'argument $type. Le drapeau ajax fonctionne toujours de la même façon
- get_new_name -> génère un nouveau nom de fichier à partir du type envoyé
//// */

//!!\\ ATTENTION !!! Ces fonctions ne doivent être lancées que entre des appels mysql_connect et mysql_close()!!!

// vérifie si l'utilisateur enregistré possède le droit demandé
function have_right_self($section, $droit)
{
if (!isset($_SESSION['identifiant']))
return false;
$tab['section'] = $section;
$tab['droit'] = $droit;
if (in_array($tab, $_SESSION['droits']))
{
return true;
}
else
return false;
}

// idem que plus haut mais véréfie aussi les droits au dessus
function have_right_or_more_self($section, $droit)
{
if (!isset($_SESSION['identifiant']))
return false;
$tab['section'] = $section;
$tab['droit'] = $droit;
if (in_array($tab, $_SESSION['droits']))
{
return true;
}
if ($droit != 'gestionnaire')
{
$tab['droit'] = 'gestionnaire';
if (in_array($tab, $_SESSION['droits']))
return true;
}
$tab['section'] = 'admin';
$tab['droit'] = 'gestionnaire';
if (in_array($tab, $_SESSION['droits']))
return true;
return false;
}

// vérifie si on a le niveau hiérarchique envoyé ou plus
function is_manager()
{
if (!isset($_SESSION['identifiant']))
return false;
foreach ($_SESSION['droits'] as $index => $code)
{
if ($code['droit'] == 'gestionnaire')
{;
return true;
}
}
return true;
}

// vérifie si le tableau de droits passé en argument contient le droit demandé
function have_right_user($section, $droit, $tableau)
{
if (!isset($_SESSION['identifiant']))
return false;
$tab['section'] = $section;
$tab['droit'] = $droit;
if (in_array($tab, $tableau))
{
return true;
}
else
return false;
}

// permet de voir si on peut modifier un droit de l'utilisateur dont les droits sont passée en argument
function have_right_on_user($section, $droit, $tableau)
{
if (!isset($_SESSION['identifiant']))
return false;
if (have_right_self('admin', 'gestionnaire'))
return true;
if ($droit == 'gestionnaire')
return false;
if (have_right_self($section, 'gestionnaire') && !have_right_user('admin', 'gestionnaire', $tableau))
return true;
return false;
}

// idem que plus haut, mais on n'envoie pas les droits de l'utilisateur en argument : n'empêche pas la modification de droits d'écriture de l'administrateur si on essaie de tricher (mais cela est sans danger)
function have_right_on_user_s($section, $droit)
{
if (!isset($_SESSION['identifiant']))
return false;
if (have_right_self('admin', 'gestionnaire'))
return true;
if ($droit == 'gestionnaire')
return false;
if (have_right_self($section, 'gestionnaire'))
return true;
return false;
}

// renvoie un tableau contenant l'ensemble des droits de l'utilisateur connecté
function get_rights_self()
{
include('mysql.php'); // données mysql
if (!isset($_SESSION['identifiant']))
return false;
mysql_connect($mysql_srv, $mysql_usr, $mysql_psw);
mysql_select_db($mysql_db);
$ress = mysql_query('SELECT * FROM users WHERE identifiant="'.$_SESSION['identifiant'].'"');
$ligne = mysql_fetch_array($ress);
if (!$ligne)
{
return false;
}
$cpt = 0;
while (key_exists('droits'.$cpt, $ligne))
{
$droits[$cpt] = $ligne['droits'.$cpt];
$cpt++;
}
$cpt = 0;
$ress = mysql_query('SELECT * FROM droits');
while ($ligne = mysql_fetch_array($ress))
{
if ($droits[$ligne['entier']] & pow(2, $ligne['puissance']))
{
$tableau[$cpt]['section'] = $ligne['section'];
$tableau[$cpt]['droit'] = $ligne['droit'];
$cpt++;
}
}
$tableau[$cpt]['section'] = 'EOF';
$tableau[$cpt]['droit'] = 'EOF';
return $tableau;
}

// renvoie un tableau contenant l'ensemble des droits de l'utilisateur passé en paramètres
function get_rights_user($identifiant)
{
include('mysql.php'); // données mysql
if (!isset($_SESSION['identifiant']))
return false;
mysql_connect($mysql_srv, $mysql_usr, $mysql_psw);
mysql_select_db($mysql_db);
$ress = mysql_query('SELECT * FROM users WHERE identifiant="'.$identifiant.'"');
$ligne = mysql_fetch_array($ress);
if (!$ligne)
{
return false;
}
$cpt = 0;
while (key_exists('droits'.$cpt, $ligne))
{
$droits[$cpt] = $ligne['droits'.$cpt];
$cpt++;
}
$cpt = 0;
$ress = mysql_query('SELECT * FROM droits');
while ($ligne = mysql_fetch_array($ress))
{
if ($droits[$ligne['entier']] & pow(2, $ligne['puissance']))
{
$tableau[$cpt]['section'] = $ligne['section'];
$tableau[$cpt]['droit'] = $ligne['droit'];
$cpt++;
}
}
$tableau[$cpt]['section'] = 'EOF';
$tableau[$cpt]['droit'] = 'EOF';
return $tableau;
}





// ajout d'un enregistrement dans la table suivi (ATTENTION : n'appeler cette fonction que entre une fonction mysql_connect et une fonction mysql_close!!!)
function suivi($nature, $code)
{
include('mysql.php'); // données mysql
mysql_connect($mysql_srv, $mysql_usr, $mysql_psw);
mysql_select_db($mysql_db);
mysql_query('INSERT into suivi VALUES ("", "'.$_SESSION['identifiant'].'", "'.time().'", "'.$nature.'", "'.$code.'")');
$ress = mysql_query('SELECT COUNT(*) AS nombre FROM suivi');
$ligne=mysql_fetch_array($ress);
if ($ligne['nombre'] > 1000)
{
$nombre = $ligne['nombre']-1000;
mysql_query('DELETE FROM suivi ORDER BY id_modif LIMIT '.$nombre);
}
}





// détermine le droit nécessaire pour effectuer un opération sur un fichier, en fonction de son nom de code
// résultat retourné sous la forme d'un tableau avec les index UM et metier.
// si impossibilité de calculer des droits, UM et metier seront vides.
function determine_right($code)
{
include ("mysql.php");
mysql_connect($mysql_srv, $mysql_usr, $mysql_psw);
mysql_select_db($mysql_db);

// on retrouve le droit que l'on met dans un tableau
if (preg_match('#^annee#', $_POST['code']))
{
$tab['UM'] = 'SRTS';
$tab['metier'] = 'ecrivain';
}
else if (preg_match("#^PEA#", $_POST['code']))
{
$num1 = substr($_POST['code'], 3, 2);
$num2 = substr($_POST['code'], 5, 2);
$num3 = substr($_POST['code'], 7, 2);
$ress = mysql_query('SELECT UM, metier FROM pea WHERE annee="'.$num1.'" AND metiern="'.$num2.'" AND numero="'.$num3.'"') or die (mysql_error());
$ligne = mysql_fetch_array($ress);
if (!$ligne)
{
$tab['UM'] = '';
$tab['metier'] = 'erreur : ce PEA n\'existe pas';
}
else
{
$tab['UM'] = $ligne['UM'];
$tab['metier'] = $ligne['metier'];
}
}
else
{
$tab['UM'] = '';
$tab['metier'] = 'erreur : format de fichier non valide : impossible de déterminer les droits';
}
return $tab;
}





// créée les 3 tablueax $codes, $files et $coms à partir de la réponse mysql passée en argument.
function get_files_tabs($ress)
{
$cpt = 0;
while ($ligne = mysql_fetch_array($ress))
{
$codes[$cpt] = $ligne['code'];
$files[$cpt] = $ligne['nom_reel'];
$coms[$cpt] = $ligne['commentaire'];
$cpt++;
}
$codes[$cpt] = 'fin';
$files[$cpt] = 'fin';
$coms[$cpt] = 'fin';

// création du tableau final et renvoi.
$tab['codes'] = $codes;
$tab['files'] = $files;
$tab['coms'] = $coms;
return $tab;
}

// créée une case pour le fichier spécifié avec les droits passés en arguments
// nom est le code du fichier
// UM et metier représentent les droits
// info contient codes, files et coms
// ajax est un flag qui indique la méthode à utiliser pour les commentaires :
// -> true indique que les commentaires seront placés dans un tableau (par commentaire, index 'code' pour le code, et 'comm' pour le commentaire) qui sera retourné par la fonction
// -> false indique que PHP va générer du code javascript qui va ajouter les commentaires
// ce drapeau est ajouté, car on s'apperçoit qu'une page appelée avec AJAX ne peut pas utiliser de code javascript directement (les balises <script></script> ne fonctionnent pas)
// ainsi si on retourne le tableau des commentaires, PHP pourra renvoyer le contenu dans le texte, séparé de la page avec '<::>' ce qui permettra à ajax de récupérer ces données (avec un split)
// et d'ajouter les commentairers 'manuellement'. (dans la page appelante de la page AJAX, utiliser split(new RegExp('<::>', 'g'). Afficher reponse[0], et traiter réponse[1] avec la fonction JS garbage_comments())
function make_file($nom, $UM, $metier, $info, $ajax)
{
if ($ajax) $nb_comments = 0;
// si autorisation d'écriture
if (have_right_or_more_self($UM, $metier))
{
echo '<td width=200 id="'.$nom.'" class="bor" align=center onmouseover=\'javascript:add_file_options("'.$nom.'", "");\' onmouseout=\'javascript:menu_reset();\'>';
}
else
echo '<td width=200 class="bor" id="'.$nom.'" align=center>';
// si fichier présent
if (in_array($nom, $info['codes']) && $info['files'][array_search($nom, $info['codes'])] != '')
{
if (!preg_match('#\.#', $info['files'][array_search($nom, $info['codes'])])) echo '(L) ';
echo '<a href="dl.php?file_code='.$nom.'">';
$ext = substr(strchr($info['files'][array_search($nom, $info['codes'])], "."), 1);
if (file_exists('images/'.$ext.'.bmp'))
echo '<img src="images/'.$ext.'.bmp" /><br/>';
echo htmlentities($info['files'][array_search($nom, $info['codes'])]).'</a>';
}
else
echo 'n/a';
echo '<br/>';
if (in_array($nom, $info['codes']) && $info['coms'][array_search($nom, $info['codes'])] != '')
{
echo '<span onmouseover="start_comment(\''.$nom.'\');" onmouseout="stop_comment();">*</span>';
if (!$ajax)
{
echo '<script type="text/javascript"><!--
add_comment(\''.$nom.'\', \''.$info['coms'][array_search($nom, $info['codes'])].'\');
//--></script>';
}
else
{
$tab_comments[$nb_comments]['code'] = $nom;
$tab_comments[$nb_comments]['comm'] = $info['coms'][array_search($nom, $info['codes'])];
$nb_comments++;
}
}
else
{
if (!$ajax)
{
echo '<script type="text/javascript"><!--
add_comment(\''.$nom.'\', \'\');
//--></script>';
}
else
{
$tab_comments[$nb_comments]['code'] = $nom;
$tab_comments[$nb_comments]['comm'] = '';
$nb_comments++;
}
}
echo '</td>';
if ($ajax) return $tab_comments;
}

// même principe que la fonction du dessus, à la diférence près que on traite un bloc, ici. L'agument $nom est remplacé par l'argument $type qui est le nom de code du bloc de la forme 'fichiers/' + nom général des fichiers (sans le nombre à la fin)
function make_block($type, $UM, $metier, $info, $ajax)
{
echo '<span id="'.$type.'">';
echo '<table><tr height=55>';
$nb_cols = 0; // nombre de colones : permet de sauter une ligne toutes les 3 colones
$nb_fichs = 0; // nombre de documents déjà existants
$reg = substr($type, 9); // enlèvre 'fichiers/' pour la génération de l'expression régulière pour aller piocher les fichiers
foreach($info['codes'] as $valeur)
{
if (preg_match(addslashes('#^'.$reg.'[0-9]+$#'), $valeur))
{
$fichiers[$nb_fichs] = $valeur;
$nb_fichs++;
}
}
if ($nb_fichs > 0)
{
foreach ($fichiers as $nom)
{
// si fichier présent
if (in_array($nom, $info['codes']) && ($info['files'][array_search($nom, $info['codes'])] != '' || $info['coms'][array_search($nom, $info['codes'])] != ''))
{
// si autorisation d'écriture
if (have_right_or_more_self($UM, $metier))
echo '<td width=200 id="'.$nom.'" class="bor" align=center onmouseover=\'javascript:add_file_options("'.$nom.'", "'.$type.'");\' onmouseout=\'javascript:menu_reset();\'>';
else
echo '<td width=200 class="bor" id="'.$nom.'" align=center>';
// si fichier présent
if (in_array($nom, $info['codes']) && $files[array_search($nom, $info['codes'])] != '')
{
if (!preg_match('#\.#', $info['files'][array_search($nom, $info['codes'])])) echo '(L) ';
echo '<a href="dl.php?file_code='.$nom.'">';
$ext = substr(strchr($info['files'][array_search($nom, $info['codes'])], "."), 1);
if (file_exists('images/'.$ext.'.bmp'))
echo '<img src="images/'.$ext.'.bmp" /><br/>';
echo htmlentities($info['files'][array_search($nom, $info['codes'])]).'</a>';
}
else
echo 'n/a';
echo '<br/>';
if (in_array($nom, $info['codes']) && $info['coms'][array_search($nom, $info['codes'])] != '')
{
echo '<span onmouseover="start_comment(\''.$nom.'\');" onmouseout="stop_comment();">*</span>';
if (!$ajax)
{
echo '<script type="text/javascript"><!--
add_comment(\''.$nom.'\', \''.$info['coms'][array_search($nom, $info['codes'])].'\');
//--></script>';
}
else
{
$tab_comments[$nb_comments]['code'] = $nom;
$tab_comments[$nb_comments]['comm'] = $info['coms'][array_search($nom, $info['codes'])];
$nb_comments++;
}
}
else
{
if (!$ajax)
{
echo '<script type="text/javascript"><!--
add_comment(\''.$nom.'\', \'\');
//--></script>';
}
else
{
$tab_comments[$nb_comments]['code'] = $nom;
$tab_comments[$nb_comments]['comm'] = '';
$nb_comments++;
}
}
echo '</td>';
$nb_cols++;
if ($nb_cols == 3)
{
$nb_cols = 0;
echo '</tr><tr height=55>';
}
}
}
}
// génération d'un nouveau nom pour un nouveau fichier
$nom = get_new_name($type);
if (have_right_or_more_self($UM, $metier))
{
echo '<td align=center id='.$nom.' class="bor" width=200 onmouseover=\'javascript:add_file_options("'.$nom.'", "'.$type.'");\' onmouseout=\'javascript:menu_reset();\'>nouveau fichier</td>';
}
echo '</tr></table></span>';
echo '</span>';
}

// renvoie un nouveau nom de fichier à partir du type envoyé
function get_new_name($type)
{
include ("mysql.php");
$type = substr($type, 9); // pour enlever 'fichiers/'
mysql_connect($mysql_srv, $mysql_usr, $mysql_psw);
mysql_select_db($mysql_db);
if (preg_match ('#^annee(19|20)[0-9]{2}\/comEx[0-9]+$#', $type))
{
$new_name_base = 'power';
$length = 5;
}
else if (preg_match ('#^PEA[0-9]{6}$#', $type))
{
$new_name_base = 'CR_suivi';
$length = 8;
}
$ress = mysql_query('SELECT code FROM files WHERE code REGEXP "'.$type.'/'.$new_name_base.'"');
$new_name = $new_name_base.'0';
$cpt = 0;
while ($ligne = mysql_fetch_array($ress))
{
$tab['chiffres'][$cpt] = 0;
$tab['codes'][$cpt] = $ligne['code'];
$cpt++;
}
if (isset($tab['codes'][0]))
{
for ($nombre = 0; $nombre < count($tab['chiffres']); $nombre++)
{
$chiffre = substr($tab['codes'][$nombre], strrpos($tab['codes'][$nombre], $new_name_base)+$length);
if ( $chiffre < count($tab['chiffres']))
$tab['chiffres'][$nombre] = 1;
}
$cpt = 0;
while ($cpt < count($tab['chiffres']) && $tab['chiffres'][$cpt] == 1)
{
$cpt++;
}
$new_name = $new_name_base.$cpt;
}
return $type.'/'.$new_name;
}
[/code]
0
arf c pas comme ca qu'on utilise.... désolé.
un modo peut-il enlever le message ci-dessus??? merci :s

peut être comme ça...

d'après la prévisu ca devrait être bon

mysql.php :
<?php
$mysql_srv = 'specimen'; // nom du serveur pour mysql
$mysql_usr = 'specimen'; // nom d'utilisateur
$mysql_psw = 'specimen'; // mot de passe à utiliser

$mysql_db = 'specimen'; // nom de la base de données
?> 



et core.php
<?php include ('mysql.php');
//// fichier core PHP ////
// contient l'ensemble des fonctions et variables globales du site
// inclusion obligatoire de mysql.php dans chaque fonction utilisant mysql

/* //// liste des fonctions dans l'ordre puis explication générale
	- func_init							-> initialisation générale (créée le menu, les pop_ups pour les fichiers si demandé, le journal si demandé)
	- have_right_self						-> définit si l'utilisateur courant possède le droit passé en argument ou non
	- have_right_pr_more_self				-> définit si l'utilisateur courant possède le droit passé en argument ou un droit qui lui est supérieur
	- is manager						-> définit si l'utilisateur courant est un manager ou l'administrateur du site
	- have_right_user						-> définit si l'utilisateur dont les droits sont passés en argument possède le droit spécifié
	- have_right_on_user					-> définit si l'utilisateur à la possibilité de modifier le droit spécifié à l'utilisateur dont les droits sont passés en argument
	- have_right_on_user_s					-> même chose, sauf que l'on ne passe pas les droits de l'utilisateur ciblé en arguments (ceci peut permettre à un gestionnaire tricheur de modifier les droits d'écriture de l'administrateur, mais sans danger)
	- get_rights_self						-> renvoie un tableau contenant l'ensemble des droits de l'utilisateur courant
	- get_rights_user						-> renvoie un tableau contenant l'ensemble des droits de l'utilisateur passé en arguments
	
	- suivi							-> permet de rajouter une information dans la table de suivi des actions
	
	- determine_right						-> détermine les droits nécessaires pour le fichier passé en argument (pour les tests ultimes dans le fichier add_file.php)
	
	- get_file_tabs						-> créée un tableau contenant les 3 tableaux $codes, $files et $coms contenant respectivement la liste des codes, des fichiers et de commentaires, récupérés par mysql dans la variable passée en argument.
	- make_file							-> crée une case pour le fichier spécifié avec les droits passés en argument. Le tableau passé en argument contient les trois tablueaux $codes, $files et $coms. Ce tableau est généré par la fonction get_file_tabs.
									-> le flag ajax, permet d'indiquer si la page appelante est elle-même appelée par AJAX ou non. Cela permet de gérer différemment les commentaires (cf commentaires fonction)
	- make_block						-> crée un bloc de fichiers (3 cases par ligne) et prend les mêmes arguments que make_file, avec à la place de $nom l'argument $type. Le drapeau ajax fonctionne toujours de la même façon
	- get_new_name						-> génère un nouveau nom de fichier à partir du type envoyé
//// */

//!!\\ ATTENTION !!! Ces fonctions ne doivent être lancées que entre des appels mysql_connect et mysql_close()!!!

// vérifie si l'utilisateur enregistré possède le droit demandé
function have_right_self($section, $droit)
{
	if (!isset($_SESSION['identifiant']))
		return false;
	$tab['section'] = $section;
	$tab['droit'] = $droit;
	if (in_array($tab, $_SESSION['droits']))
	{
		return true;
	}
	else
		return false;
}

// idem que plus haut mais véréfie aussi les droits au dessus
function have_right_or_more_self($section, $droit)
{
	if (!isset($_SESSION['identifiant']))
		return false;
	$tab['section'] = $section;
	$tab['droit'] = $droit;
	if (in_array($tab, $_SESSION['droits']))
	{
		return true;
	}
	if ($droit != 'gestionnaire')
	{
		$tab['droit'] = 'gestionnaire';
		if (in_array($tab, $_SESSION['droits']))
			return true;
	}
	$tab['section'] = 'admin';
	$tab['droit'] = 'gestionnaire';
	if (in_array($tab, $_SESSION['droits']))
		return true;
	return false;
}

// vérifie si on a le niveau hiérarchique envoyé ou plus
function is_manager()
{
	if (!isset($_SESSION['identifiant']))
		return false;
	foreach ($_SESSION['droits'] as $index => $code)
	{
		if ($code['droit'] == 'gestionnaire')
		{;
			return true;
		}
	}
	return true;
}

// vérifie si le tableau de droits passé en argument contient le droit demandé
function have_right_user($section, $droit, $tableau)
{
	if (!isset($_SESSION['identifiant']))
		return false;
	$tab['section'] = $section;
	$tab['droit'] = $droit;
	if (in_array($tab, $tableau))
	{
		return true;
	}
	else
		return false;
}

// permet de voir si on peut modifier un droit de l'utilisateur dont les droits sont passée en argument
function have_right_on_user($section, $droit, $tableau)
{
	if (!isset($_SESSION['identifiant']))
		return false;
	if (have_right_self('admin', 'gestionnaire'))
		return true;
	if ($droit == 'gestionnaire')
		return false;
	if (have_right_self($section, 'gestionnaire') && !have_right_user('admin', 'gestionnaire', $tableau))
		return true;
	return false;
}

// idem que plus haut, mais on n'envoie pas les droits de l'utilisateur en argument : n'empêche pas la modification de droits d'écriture de l'administrateur si on essaie de tricher (mais cela est sans danger)
function have_right_on_user_s($section, $droit)
{
	if (!isset($_SESSION['identifiant']))
		return false;
	if (have_right_self('admin', 'gestionnaire'))
		return true;
	if ($droit == 'gestionnaire')
		return false;
	if (have_right_self($section, 'gestionnaire'))
		return true;
	return false;
}

// renvoie un tableau contenant l'ensemble des droits de l'utilisateur connecté
function get_rights_self()
{
	include('mysql.php'); // données mysql
	if (!isset($_SESSION['identifiant']))
		return false;
	mysql_connect($mysql_srv, $mysql_usr, $mysql_psw);
	mysql_select_db($mysql_db);
	$ress = mysql_query('SELECT * FROM users WHERE identifiant="'.$_SESSION['identifiant'].'"');
	$ligne = mysql_fetch_array($ress);
	if (!$ligne)
	{
		return false;
	}
	$cpt = 0;
	while (key_exists('droits'.$cpt, $ligne))
	{
		$droits[$cpt] = $ligne['droits'.$cpt];
		$cpt++;
	}
	$cpt = 0;
	$ress = mysql_query('SELECT * FROM droits');
	while ($ligne = mysql_fetch_array($ress))
	{
		if ($droits[$ligne['entier']] & pow(2, $ligne['puissance']))
		{
			$tableau[$cpt]['section'] = $ligne['section'];
			$tableau[$cpt]['droit'] = $ligne['droit'];
			$cpt++;
		}
	}
	$tableau[$cpt]['section'] = 'EOF';
	$tableau[$cpt]['droit'] = 'EOF';
	return $tableau;
}

// renvoie un tableau contenant l'ensemble des droits de l'utilisateur passé en paramètres
function get_rights_user($identifiant)
{
	include('mysql.php'); // données mysql
	if (!isset($_SESSION['identifiant']))
		return false;
	mysql_connect($mysql_srv, $mysql_usr, $mysql_psw);
	mysql_select_db($mysql_db);
	$ress = mysql_query('SELECT * FROM users WHERE identifiant="'.$identifiant.'"');
	$ligne = mysql_fetch_array($ress);
	if (!$ligne)
	{
		return false;
	}
	$cpt = 0;
	while (key_exists('droits'.$cpt, $ligne))
	{
		$droits[$cpt] = $ligne['droits'.$cpt];
		$cpt++;
	}
	$cpt = 0;
	$ress = mysql_query('SELECT * FROM droits');
	while ($ligne = mysql_fetch_array($ress))
	{
		if ($droits[$ligne['entier']] & pow(2, $ligne['puissance']))
		{
			$tableau[$cpt]['section'] = $ligne['section'];
			$tableau[$cpt]['droit'] = $ligne['droit'];
			$cpt++;
		}
	}
	$tableau[$cpt]['section'] = 'EOF';
	$tableau[$cpt]['droit'] = 'EOF';
	return $tableau;
}





// ajout d'un enregistrement dans la table suivi (ATTENTION : n'appeler cette fonction que entre une fonction mysql_connect et une fonction mysql_close!!!)
function suivi($nature, $code)
{
	include('mysql.php'); // données mysql
	mysql_connect($mysql_srv, $mysql_usr, $mysql_psw);
	mysql_select_db($mysql_db);
	mysql_query('INSERT into suivi VALUES ("", "'.$_SESSION['identifiant'].'", "'.time().'", "'.$nature.'", "'.$code.'")');
	$ress = mysql_query('SELECT COUNT(*) AS nombre FROM suivi');
	$ligne=mysql_fetch_array($ress);
	if ($ligne['nombre'] > 1000)
	{
		$nombre = $ligne['nombre']-1000;
		mysql_query('DELETE FROM suivi ORDER BY id_modif LIMIT '.$nombre);
	}
}





// détermine le droit nécessaire pour effectuer un opération sur un fichier, en fonction de son nom de code
// résultat retourné sous la forme d'un tableau avec les index UM et metier.
// si impossibilité de calculer des droits, UM et metier seront vides.
function determine_right($code)
{
	include ("mysql.php");
	mysql_connect($mysql_srv, $mysql_usr, $mysql_psw);
	mysql_select_db($mysql_db);
	
	// on retrouve le droit que l'on met dans un tableau
	if (preg_match('#^annee#', $_POST['code']))
	{
		$tab['UM'] = 'SRTS';
		$tab['metier'] = 'ecrivain';
	}
	else if (preg_match("#^PEA#", $_POST['code']))
	{
		$num1 = substr($_POST['code'], 3, 2);
		$num2 = substr($_POST['code'], 5, 2);
		$num3 = substr($_POST['code'], 7, 2);
		$ress = mysql_query('SELECT UM, metier FROM pea WHERE annee="'.$num1.'" AND metiern="'.$num2.'" AND numero="'.$num3.'"') or die (mysql_error());
		$ligne = mysql_fetch_array($ress);
		if (!$ligne)
		{
			$tab['UM'] = '';
			$tab['metier'] = 'erreur : ce PEA n\'existe pas';
		}
		else
		{
			$tab['UM'] = $ligne['UM'];
			$tab['metier'] = $ligne['metier'];
		}
	}
	else
	{
		$tab['UM'] = '';
		$tab['metier'] = 'erreur : format de fichier non valide : impossible de déterminer les droits';
	}
	return $tab;
}





// créée les 3 tablueax $codes, $files et $coms à partir de la réponse mysql passée en argument.
function get_files_tabs($ress)
{
	$cpt = 0;
	while ($ligne = mysql_fetch_array($ress))
	{
		$codes[$cpt] = $ligne['code'];
		$files[$cpt] = $ligne['nom_reel'];
		$coms[$cpt] = $ligne['commentaire'];
		$cpt++;
	}
	$codes[$cpt] = 'fin';
	$files[$cpt] = 'fin';
	$coms[$cpt] = 'fin';
	
	// création du tableau final et renvoi.
	$tab['codes'] = $codes;
	$tab['files'] = $files;
	$tab['coms'] = $coms;
	return $tab;
}

// créée une case pour le fichier spécifié avec les droits passés en arguments
// nom est le code du fichier
// UM et metier représentent les droits
// info contient codes, files et coms
// ajax est un flag qui indique la méthode à utiliser pour les commentaires : 
	// -> true indique que les commentaires seront placés dans un tableau (par commentaire, index 'code' pour le code, et 'comm' pour le commentaire) qui sera retourné par la fonction
	// -> false indique que PHP va générer du code javascript qui va ajouter les commentaires
// ce drapeau est ajouté, car on s'apperçoit qu'une page appelée avec AJAX ne peut pas utiliser de code javascript directement (les balises <script></script> ne fonctionnent pas)
// ainsi si on retourne le tableau des commentaires, PHP pourra renvoyer le contenu dans le texte, séparé de la page avec '<::>' ce qui permettra à ajax de récupérer ces données (avec un split)
// et d'ajouter les commentairers 'manuellement'. (dans la page appelante de la page AJAX, utiliser split(new RegExp('<::>', 'g'). Afficher reponse[0], et traiter réponse[1] avec la fonction  JS garbage_comments())
function make_file($nom, $UM, $metier, $info, $ajax)
{
	if ($ajax) $nb_comments = 0;
	// si autorisation d'écriture
	if (have_right_or_more_self($UM, $metier))
	{
		echo '<td width=200 id="'.$nom.'" class="bor" align=center onmouseover=\'javascript:add_file_options("'.$nom.'", "");\' onmouseout=\'javascript:menu_reset();\'>';
	}
	else
		echo '<td width=200 class="bor" id="'.$nom.'" align=center>';
	// si fichier présent
	if (in_array($nom, $info['codes']) && $info['files'][array_search($nom, $info['codes'])] != '')
	{
		if (!preg_match('#\.#', $info['files'][array_search($nom, $info['codes'])])) echo '(L) ';
		echo '<a href="dl.php?file_code='.$nom.'">';
		$ext = substr(strchr($info['files'][array_search($nom, $info['codes'])], "."), 1);
		if (file_exists('images/'.$ext.'.bmp'))
			echo '<img src="images/'.$ext.'.bmp" /><br/>';
		echo htmlentities($info['files'][array_search($nom, $info['codes'])]).'</a>';
	}
	else
		echo 'n/a';
	echo '<br/>';
	if (in_array($nom, $info['codes']) && $info['coms'][array_search($nom, $info['codes'])] != '')
	{
		echo '<span onmouseover="start_comment(\''.$nom.'\');" onmouseout="stop_comment();">*</span>';
		if (!$ajax)
		{
			echo '<script type="text/javascript"><!--
				add_comment(\''.$nom.'\', \''.$info['coms'][array_search($nom, $info['codes'])].'\');
				//--></script>';
		}
		else
		{
			$tab_comments[$nb_comments]['code'] = $nom;
			$tab_comments[$nb_comments]['comm'] = $info['coms'][array_search($nom, $info['codes'])];
			$nb_comments++;
		}
	}
	else
	{
		if (!$ajax)
		{
			echo '<script type="text/javascript"><!--
				add_comment(\''.$nom.'\', \'\');
				//--></script>';
		}
		else
		{
			$tab_comments[$nb_comments]['code'] = $nom;
			$tab_comments[$nb_comments]['comm'] = '';
			$nb_comments++;
		}
	}
	echo '</td>';
	if ($ajax) return $tab_comments;
}

// même principe que la fonction du dessus, à la diférence près que on traite un bloc, ici. L'agument $nom est remplacé par l'argument $type qui est le nom de code du bloc de la forme 'fichiers/' + nom général des fichiers (sans le nombre à la fin)
function make_block($type, $UM, $metier, $info, $ajax)
{
	echo '<span id="'.$type.'">';
	echo '<table><tr height=55>';
	$nb_cols = 0; // nombre de colones : permet de sauter une ligne toutes les 3 colones
	$nb_fichs = 0; // nombre de documents déjà existants
	$reg = substr($type, 9); // enlèvre 'fichiers/' pour la génération de l'expression régulière pour aller piocher les fichiers
	foreach($info['codes'] as $valeur)
	{
		if (preg_match(addslashes('#^'.$reg.'[0-9]+$#'), $valeur))
		{
			$fichiers[$nb_fichs] = $valeur;
			$nb_fichs++;
		}
	}
	if ($nb_fichs > 0)
	{
		foreach ($fichiers as $nom)
		{
			// si fichier présent
			if (in_array($nom, $info['codes']) && ($info['files'][array_search($nom, $info['codes'])] != '' || $info['coms'][array_search($nom, $info['codes'])] != ''))
			{
				// si autorisation d'écriture
				if (have_right_or_more_self($UM, $metier))
					echo '<td width=200 id="'.$nom.'" class="bor" align=center onmouseover=\'javascript:add_file_options("'.$nom.'", "'.$type.'");\' onmouseout=\'javascript:menu_reset();\'>';
				else
					echo '<td width=200 class="bor" id="'.$nom.'" align=center>';
				// si fichier présent
				if (in_array($nom, $info['codes']) && $files[array_search($nom, $info['codes'])] != '')
				{
					if (!preg_match('#\.#', $info['files'][array_search($nom, $info['codes'])])) echo '(L) ';
					echo '<a href="dl.php?file_code='.$nom.'">';
					$ext = substr(strchr($info['files'][array_search($nom, $info['codes'])], "."), 1);
					if (file_exists('images/'.$ext.'.bmp'))
						echo '<img src="images/'.$ext.'.bmp" /><br/>';
					echo htmlentities($info['files'][array_search($nom, $info['codes'])]).'</a>';
				}
				else
					echo 'n/a';
				echo '<br/>';
				if (in_array($nom, $info['codes']) && $info['coms'][array_search($nom, $info['codes'])] != '')
				{
					echo '<span onmouseover="start_comment(\''.$nom.'\');" onmouseout="stop_comment();">*</span>';
					if (!$ajax)
					{
						echo '<script type="text/javascript"><!--
							add_comment(\''.$nom.'\', \''.$info['coms'][array_search($nom, $info['codes'])].'\');
							//--></script>';
					}
					else
					{
						$tab_comments[$nb_comments]['code'] = $nom;
						$tab_comments[$nb_comments]['comm'] = $info['coms'][array_search($nom, $info['codes'])];
						$nb_comments++;
					}
				}
				else
				{
					if (!$ajax)
					{
						echo '<script type="text/javascript"><!--
							add_comment(\''.$nom.'\', \'\');
							//--></script>';
					}
					else
					{
						$tab_comments[$nb_comments]['code'] = $nom;
						$tab_comments[$nb_comments]['comm'] = '';
						$nb_comments++;
					}
				}
				echo '</td>';
				$nb_cols++;
				if ($nb_cols == 3)
				{
					$nb_cols = 0;
					echo '</tr><tr height=55>';
				}
			}
		}
	}
	// génération d'un nouveau nom pour un nouveau fichier
	$nom = get_new_name($type);
	if (have_right_or_more_self($UM, $metier))
	{
		echo '<td align=center id='.$nom.' class="bor" width=200 onmouseover=\'javascript:add_file_options("'.$nom.'", "'.$type.'");\' onmouseout=\'javascript:menu_reset();\'>nouveau fichier</td>';
	}
	echo '</tr></table></span>';
	echo '</span>';
}

// renvoie un nouveau nom de fichier à partir du type envoyé
function get_new_name($type)
{
	include ("mysql.php");
	$type = substr($type, 9); // pour enlever 'fichiers/'
	mysql_connect($mysql_srv, $mysql_usr, $mysql_psw);
	mysql_select_db($mysql_db);
	if (preg_match ('#^annee(19|20)[0-9]{2}\/comEx[0-9]+$#', $type))
	{
		$new_name_base = 'power';
		$length = 5;
	}
	else if (preg_match ('#^PEA[0-9]{6}$#', $type))
	{
		$new_name_base = 'CR_suivi';
		$length = 8;
	}
	$ress = mysql_query('SELECT code FROM files WHERE code REGEXP "'.$type.'/'.$new_name_base.'"');
	$new_name = $new_name_base.'0';
	$cpt = 0;
	while ($ligne = mysql_fetch_array($ress))
	{
		$tab['chiffres'][$cpt] = 0;
		$tab['codes'][$cpt] = $ligne['code'];
		$cpt++;
	}
	if (isset($tab['codes'][0]))
	{
		for ($nombre = 0; $nombre < count($tab['chiffres']); $nombre++)
		{
			$chiffre = substr($tab['codes'][$nombre], strrpos($tab['codes'][$nombre], $new_name_base)+$length);
			if ( $chiffre < count($tab['chiffres']))
				$tab['chiffres'][$nombre] = 1;
		}
		$cpt = 0;
		while ($cpt < count($tab['chiffres']) && $tab['chiffres'][$cpt] == 1)
		{
			$cpt++;
		}
		$new_name = $new_name_base.$cpt;
	}
	return $type.'/'.$new_name;
}
0
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46
1 juin 2008 à 11:04
tu veux ecrire tes pages directement en jap ? Oo

moi pr que ca passe j'ai utilisé mon mini chat ^^
comme j'lui ai dit d'encoder directement en ascii
bah le tr etait joué ^^
et regardes le code source de ccm ^^
eux aussi ont remplacé tes carac en ascii ^^
0
ce serait vraiment trop long de faire les caractères avec leur code l'un après l'autre...
0
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46
1 juin 2008 à 16:43
certe oui Oo
mais a part encoder .. franchement j'vois pas :s
de plus l'avantage de l'encodage en ascii ...
c'est que n'importe qui les affiche Oo
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
1 juin 2008 à 18:39
J'ai essayé ton script et les deux fichiers inclus en local et sur free et dans les deux cas ls caractères japonais s'affichent correctement.

Pb de configuration ? Quel est ton environnement ?

Il faut de toutes manières que tu révises le code php principal : à titre indicatif deux extraits :
if (isset($_GET['page']))// si on indique une page précise, on affiche cette page
	{
	if( ctype_xdigit( $_GET['page'] ) )
		{	// si on an bien entré un nombre (sécurité)
		if( $_GET['page'] > 0 && $_GET['page'] <= $nb_pages )
			$page = $_GET['page'];
		else
			$page = 1; // petit test pour vérfier que le nombre est correct
		}
	else // dans le cas d'une tentative de piratage, on prend par défaut la première page
		$page = 1;
	}
else // sinon on prend la page 1 par défaut
	$page = 1;


Il me semble que des accolades manquent (extrait ci-dessus corrig

	echo "le ".date("d/m/Y &#2120;\hi", $ligne['timestamp'])." : ";
	echo "<span class=\"news_titre\">".$ligne['titre']."<br/><br/></­span>";
	$contenu = nl2br(stripslashes($ligne['contenu']));
	// $contenu = preg_replace($tab_users_regexp, '<a href="mailto:$1@dga.defense.gouv.fr">$1</a>', $contenu);
	// $contenu = preg_replace('#\[USER\](.*)\/USER\#isU', '$1', $contenu);
	echo "<div class=\"news_contenu\">".$contenu."</div>";
	echo "</td></tr>";
	}
if ($cpt > 0) // un tableau a &#44393; cr&#43594; echo "</table>";
// on fait des liens vers les autres pages

Ici on note des caractères étranges (première et avant dernière ligne. Par ailleurs le bloc d'instructions déclenché par le test de la dernière ligne semble mal délimité.
0
les caractères étranges sont dus au fait que j'ai passé la page de iso8859-1 a UTF-8 dans notepad++, j'ai du oublier de corriger quelques accents...

quand au reste, je verrai en rentrant du boulot, je dois y aller là^^

merci en tout cas
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
2 juin 2008 à 07:48
Il est indispensable que tu corriges ces caractères car ils peuvent influer sur l'analyse syntaxique de tes scripts.

Autre vérification à faire : est-ce-que tu as un BOM au début de ton fichier ? Vérifie dans NotePad++ le format de tes fichiers, je crois me souvenir que tu peux choisir entre utf-8 avec ou sans BOM.
0
naruto-94 Messages postés 865 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 20 décembre 2012 188
2 juin 2008 à 04:09
0
@ croy => J'ai en effet le BOM au début, pour une raison que j'ignore je ne peux pas choisir le format UTF-8 sans BOM (choix grisé). J'ai corrigé les petites défauts, ca ne marche toujours pas


@ naruto => je suis tombé plusieurs fois sur cette page pendant mes recherches, mais elle ne m'a pas aidé... :S en tout cas merci du tuyau :)
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
2 juin 2008 à 10:38
Dans le menu Format de Notepad++ j'ai une option "Encoder en UTF-8 (sans BOM)" qui est active : recherche comment l'activer car ce BOM te posera des pbs (même si je ne vois pas comment ça pourrait expliquer ton pb actuel).

Corrige les petites pailles que je t'ai signalé et dis ce que ça donne.
0
pour avoir coder en UTF-8 sans BOM, il faut être en ANSI...

j'ai essayé de faire ça mais ca ne marche pas les accents sont foireux et le japonais s'affiche bizarrement (plus des points d'interrogation, mais plutôt ca :

http://y-boss.b3dgs.com/french/home.php


firefox croit toujours a de l'iso 8859-1

j'ai également enregistré toutes les pages au format UTF-8 sans COM (ANSI) (core.php et mysql.php) et j'ai supprimé l'ensemble du fichier "core.php" étant donné qu'en fait aucune fonction ne m'est utile... (j'ai juste gardé le include vers mysql.php)
0
croy Messages postés 453 Date d'inscription samedi 19 janvier 2008 Statut Membre Dernière intervention 23 octobre 2012 114
2 juin 2008 à 12:01
ANSI et UTF-8 ne sontt pas du tout la même chose : recherche un peu plus dans NotePad++ comment afficher le Format sans BOM.

Ton url s'affiche effectivement bizarrement mais ce n'est pas parceque "Firefox croit toujours a de l'iso 8859-1" puisqu'il y a la balise charset=utf-8.

Je parierai volontiers que le source correspondant n'est pas en utf-8.

Cherche encore et encore en comprenant bien ce que tu fais. Il est difficile de t'aider sans disposer des fichiers eux-mêmes.

Pour m'envoyer ces fichiers :
1. communique moi ton adresse eMail (tu es en anomyme sur le forum)
2. je t'envoie mon email sur cette adresse
3. tu me réponds avec les deux fichiers en pièce jointe.
0