Skip to content
Extraits de code Groupes Projets
Valider 28fb14bb rédigé par esj's avatar esj
Parcourir les fichiers

Suite de [8129]: vérifier qu'un ID est alphanumérique, et traiter le cas...

Suite de [8129]: vérifier qu'un ID est alphanumérique, et traiter le cas IDREFS en plus du cas IDREF de [8130]. Utile pour l'attribut {{{headers}}} de {{{th}}}.
parent 5774750f
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -1741,14 +1741,16 @@ function fin_page() ...@@ -1741,14 +1741,16 @@ function fin_page()
return debut_grand_cadre(true) return debut_grand_cadre(true)
. "\n" . "\n"
. (($spip_display == 4) . (($spip_display == 4)
? ("<div><a href='./?set_disp=2'>" ? ("<div><a href='./?set_disp=2&exec="
. _T("access_interface_graphique") . _request('exec')
. "</a></div>") . "'>"
. _T("access_interface_graphique")
. "</a></div>")
: ('<div style="text-align: right; font-family: Verdana; font-size: 8pt">' : ('<div style="text-align: right; font-family: Verdana; font-size: 8pt">'
. info_copyright() . info_copyright()
. "<br />" . "<br />"
. _T('info_copyright_doc') . _T('info_copyright_doc')
. '</div>')) . '</div>'))
. fin_grand_cadre(true) . fin_grand_cadre(true)
. "</div>" // cf. <div center> ouverte dans conmmencer_page() . "</div>" // cf. <div center> ouverte dans conmmencer_page()
......
...@@ -17,6 +17,8 @@ include_spip('inc/sax'); ...@@ -17,6 +17,8 @@ include_spip('inc/sax');
define('_REGEXP_DOCTYPE', define('_REGEXP_DOCTYPE',
'/^\s*(<[?][^>]*>\s*)?<!DOCTYPE\s+(\w+)\s+(\w+)\s*([^>]*)>/'); '/^\s*(<[?][^>]*>\s*)?<!DOCTYPE\s+(\w+)\s+(\w+)\s*([^>]*)>/');
define('_REGEXP_ID', '/^[A-Za-z_][\w_:.]*$/');
// http://doc.spip.org/@validateur // http://doc.spip.org/@validateur
function validateur($data) function validateur($data)
{ {
...@@ -199,45 +201,64 @@ function validerAttribut($parser, $name, $val, $bal) ...@@ -199,45 +201,64 @@ function validerAttribut($parser, $name, $val, $bal)
. coordonnees_erreur($parser); . coordonnees_erreur($parser);
} else{ } else{
$type = $a[$name][0]; $type = $a[$name][0];
if ($type[0]=='/') { if ($type[0]=='/')
if (!preg_match($a[$name][0], $val)) { valider_motif($parser, $name, $val, $bal, $type);
$phraseur_xml->err[]= " <p><b>$val</b>" elseif ($type == 'ID') {
. _L(" valeur de l'attribut ")
. "<b>$name</b>"
. _L(' de ')
. "<b>$bal</b>"
. _L(" n'est pas conforme au motif</p><p>")
. "<b>" . $a[$name][0] . "</b></p>"
. coordonnees_erreur($parser);
}
} elseif ($type == 'ID') {
if (isset($phraseur_xml->ids[$val])) { if (isset($phraseur_xml->ids[$val])) {
list($l,$c) = $phraseur_xml->ids[$val];
$phraseur_xml->err[]= " <p><b>$val</b>" $phraseur_xml->err[]= " <p><b>$val</b>"
. _L(" valeur de l'attribut ") . _L(" valeur de l'attribut ")
. "<b>$name</b>" . "<b>$name</b>"
. _L(' de ') . _L(' de ')
. "<b>$bal</b>" . "<b>$bal</b>"
. _L(" incorrect ")
. coordonnees_erreur($parser);
list($l,$c) = $phraseur_xml->ids[$val];
$phraseur_xml->err[]= " <p><b>$val</b>"
. _L(" vu auparavant ") . _L(" vu auparavant ")
. $l . "(L$l,C$c)"
. " " . coordonnees_erreur($parser);
. $c; } else {
} else $phraseur_xml->ids[$val] = array(xml_get_current_line_number($parser), xml_get_current_column_number($parser)); valider_motif($parser, $name, $val, $bal, _REGEXP_ID);
$phraseur_xml->ids[$val] = array(xml_get_current_line_number($parser), xml_get_current_column_number($parser));
}
} elseif ($type == 'IDREF') { } elseif ($type == 'IDREF') {
$phraseur_xml->idrefs[] = array($val, xml_get_current_line_number($parser), xml_get_current_column_number($parser)); $phraseur_xml->idrefs[] = array($val, xml_get_current_line_number($parser), xml_get_current_column_number($parser));
} elseif ($type == 'IDREFS') {
$phraseur_xml->idrefss[] = array($val, xml_get_current_line_number($parser), xml_get_current_column_number($parser));
} }
} }
} }
function valider_motif($parser, $name, $val, $bal, $motif)
{
global $phraseur_xml;
if (!preg_match($motif, $val)) {
$phraseur_xml->err[]= " <p><b>$val</b>"
. _L(" valeur de l'attribut ")
. "<b>$name</b>"
. _L(' de ')
. "<b>$bal</b>"
. _L(" n'est pas conforme au motif</p><p>")
. "<b>" . $motif . "</b></p>"
. coordonnees_erreur($parser);
}
}
function valider_idref($nom, $ligne, $col)
{
global $phraseur_xml;
if (!isset($phraseur_xml->ids[$nom]))
$phraseur_xml->err[]= " <p><b>$nom</b>"
. _L(" ID inconnu ")
. $ligne
. " "
. $col;
}
class ValidateurXML { class ValidateurXML {
// http://doc.spip.org/@debutElement // http://doc.spip.org/@debutElement
function debutElement($phraseur, $name, $attrs) function debutElement($phraseur, $name, $attrs)
{ {
validerElement($phraseur, $name, $attrs); validerElement($phraseur, $name, $attrs);
xml_debutElement($phraseur, $name, $attrs); xml_debutElement($phraseur, $name, $attrs);
foreach ($attrs as $k => $v) { foreach ($attrs as $k => $v) {
...@@ -275,19 +296,18 @@ function phraserTout($phraseur, $data) ...@@ -275,19 +296,18 @@ function phraserTout($phraseur, $data)
if (isset($phraseur_xml->entites['HTMLsymbol'])) if (isset($phraseur_xml->entites['HTMLsymbol']))
$data = unicode2charset(html2unicode($data, true)); $data = unicode2charset(html2unicode($data, true));
xml_parsestring($phraseur, $data); xml_parsestring($phraseur, $data);
if (!$phraseur_xml->err) { if (!$phraseur_xml->err) {
foreach ($this->idrefs as $idref) { foreach ($this->idrefs as $idref) {
list($nom, $ligne, $col) = $idref; list($nom, $ligne, $col) = $idref;
if (!isset($phraseur_xml->ids[$nom])) valider_idref($nom, $ligne, $col);
$phraseur_xml->err[]= " <p><b>$nom</b>" }
. _L(" ID inconnu ") foreach ($this->idrefss as $idref) {
. $ligne list($noms, $ligne, $col) = $idref;
. " " foreach(preg_split('/\s+/', $noms) as $nom)
. $col; valider_idref($nom, $ligne, $col);
} }
} }
return !$this->err ? $this->res : join('<br />', $this->err) . '<br />'; return !$this->err ? $this->res : join('<br />', $this->err) . '<br />';
...@@ -304,6 +324,7 @@ function phraserTout($phraseur, $data) ...@@ -304,6 +324,7 @@ function phraserTout($phraseur, $data)
var $attributs = array(); var $attributs = array();
var $ids = array(); var $ids = array();
var $idrefs = array(); var $idrefs = array();
var $idrefss = array();
var $err = array(); var $err = array();
} }
......
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