Skip to content
Extraits de code Groupes Projets
Valider 5ea19f7d rédigé par Fil's avatar Fil
Parcourir les fichiers

correction (et accélération) de l'import du charset pour ne plus transcoder...

correction (et accélération) de l'import du charset pour ne plus transcoder les entites < 128 (car si elles sont codées ainsi, c'est à dessein).

ce qui permet de retranscoder les squelettes

au passage correction d'un bug dans le panneau de login lorsqu'on est déjà connecté (plantait sur http_href() non définie)

parent 90753fa1
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -244,7 +244,8 @@ function charset2unicode($texte, $charset='AUTO' /* $forcer: obsolete*/) { ...@@ -244,7 +244,8 @@ function charset2unicode($texte, $charset='AUTO' /* $forcer: obsolete*/) {
// //
// Transforme les entites unicode &#129; dans le charset specifie // Transforme les entites unicode &#129; dans le charset specifie
// // Attention on ne transforme pas les entites < &#128; car si elles
// ont ete encodees ainsi c'est a dessein
function unicode2charset($texte, $charset='AUTO') { function unicode2charset($texte, $charset='AUTO') {
static $CHARSET_REVERSE; static $CHARSET_REVERSE;
if ($charset == 'AUTO') if ($charset == 'AUTO')
...@@ -265,19 +266,22 @@ function unicode2charset($texte, $charset='AUTO') { ...@@ -265,19 +266,22 @@ function unicode2charset($texte, $charset='AUTO') {
$trans = array(); $trans = array();
// Construire la table de remplacements // Construire la table de remplacements
// 1. Entites decimales (type "&#123;") // 1. Entites decimales (type "&#123;")
if (preg_match_all(',&#([0-9]+);,', $texte, $regs, PREG_PATTERN_ORDER)) { if (preg_match_all(',&#(0*[1-9][0-9][0-9]+);,',
$texte, $regs, PREG_PATTERN_ORDER)) {
$entites = array_flip($regs[1]); $entites = array_flip($regs[1]);
foreach ($entites as $e => $v) { foreach ($entites as $e => $v) {
if ($s = ($e < 128) ? $e : $CHARSET_REVERSE[$charset][intval($e)]) if (intval($e)>127
AND $s = $CHARSET_REVERSE[$charset][intval($e)])
$trans['&#'.$e.';'] = chr($s); $trans['&#'.$e.';'] = chr($s);
} }
} }
// 2. Entites hexadecimales (type "&#xD;") // 2. Entites hexadecimales (type "&#xd0a;")
if (preg_match_all(',&#x([0-9a-zA-Z]+);,', $texte, $regs, PREG_PATTERN_ORDER)) { if (preg_match_all(',&#x(0*[1-9a-f][0-9a-f][0-9a-f]+);,i',
$texte, $regs, PREG_PATTERN_ORDER)) {
$entites = array_flip($regs[1]); $entites = array_flip($regs[1]);
foreach ($entites as $e => $v) { foreach ($entites as $e => $v) {
$h = hexdec($e); $h = hexdec($e);
if ($s = ($h < 128) ? $h : $CHARSET_REVERSE[$charset][$h]) if ($s = $CHARSET_REVERSE[$charset][$h])
$trans['&#x'.$e.';'] = chr($s); $trans['&#x'.$e.';'] = chr($s);
} }
} }
...@@ -425,10 +429,28 @@ function caractere_utf_8($num) { ...@@ -425,10 +429,28 @@ function caractere_utf_8($num) {
} }
function unicode_to_utf_8($texte) { function unicode_to_utf_8($texte) {
while (preg_match(',&#0*([0-9]+);,', $texte, $regs)) { $vu = array();
$s = caractere_utf_8($regs[1]);
$texte = str_replace($regs[0], $s, $texte); // 1. Entites &#128; et suivantes
if (preg_match_all(',&#0*([1-9][0-9][0-9]+);,',
$texte, $regs, PREG_SET_ORDER))
foreach ($regs as $reg) {
if ($reg[1]>127 AND !$vu[$reg[0]]++) {
$s = caractere_utf_8($reg[1]);
$texte = str_replace($reg[0], $s, $texte);
}
} }
// 2. Entites > &#xFF;
if (preg_match_all(',&#x0*([1-9a-f][0-9a-f][0-9a-f]+);,i',
$texte, $regs, PREG_SET_ORDER))
foreach ($regs as $reg) {
if (!$vu[$reg[0]]++) {
$s = caractere_utf_8(hexdec($reg[1]));
$texte = str_replace($reg[0], $s, $texte);
}
}
return $texte; return $texte;
} }
...@@ -524,7 +546,7 @@ function is_utf8($string) { ...@@ -524,7 +546,7 @@ function is_utf8($string) {
function is_ascii($string) { function is_ascii($string) {
return !strlen( return !strlen(
preg_replace( preg_replace(
',[\x20-\x7E],s', ',[\x09\x0A\x0D\x20-\x7E],s',
'', $string)); '', $string));
} }
......
...@@ -68,6 +68,7 @@ function login_explicite($login, $cible) { ...@@ -68,6 +68,7 @@ function login_explicite($login, $cible) {
if (($cible != $action) && !headers_sent() if (($cible != $action) && !headers_sent()
AND !$_GET['var_mode']) AND !$_GET['var_mode'])
redirige_par_entete($cible); redirige_par_entete($cible);
include_ecrire('inc_minipres');
return http_href($cible, _T('login_par_ici')); return http_href($cible, _T('login_par_ici'));
} }
return login_pour_tous($login ? $login : _request('var_login'), $cible, $action); return login_pour_tous($login ? $login : _request('var_login'), $cible, $action);
......
...@@ -573,7 +573,7 @@ function calculer_squelette($squelette, $nom, $gram, $sourcefile) { ...@@ -573,7 +573,7 @@ function calculer_squelette($squelette, $nom, $gram, $sourcefile) {
// Pre-traitement : reperer le charset du squelette, et le convertir // Pre-traitement : reperer le charset du squelette, et le convertir
// Bonus : supprime le BOM // Bonus : supprime le BOM
include_ecrire('inc_charsets'); include_ecrire('inc_charsets');
# $squelette = transcoder_page($squelette); $squelette = transcoder_page($squelette);
// Phraser le squelette, selon sa grammaire // Phraser le squelette, selon sa grammaire
// pour le moment: "html" seul connu (HTML+balises BOUCLE) // pour le moment: "html" seul connu (HTML+balises BOUCLE)
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter