Projet

Général

Profil

Actions

Anomalie #4130

fermé

[Report 4116] [OOO Layout] Des caractères apparaissent comme des htmlentities

Ajouté par Éric Brison il y a presque 13 ans. Mis à jour il y a presque 13 ans.

Statut:
Intégré
Priorité:
Normal
Assigné à:
Nicolas Thing-Leoh
Version cible:
Début:
25/06/2013
Echéance:
% réalisé:

100%

Temps estimé:
2:00 h
Version source:
Solution proposée:

Les text HTML sont correctement affiché dans les variables simples (::set()) car leur valeur est directement mise dans le XML par remplacement.

Par contre pour les tableaux ce remplacement est via le DOM est les & sont donc transformés en '&'.

Il faut dans la méthode OooLayout::replaceNodeText() ajouter un déencodage avant le remplacement .

if ($objNodeNested->nodeType == XML_TEXT_NODE) {
if ($objNodeNested->nodeValue != "") {
if (strpos($strNewContent, '<text:p>') !== false) {
$strNewContent = str_replace('<', '--Lower.Than--', $strNewContent);
$strNewContent = str_replace('>', '--Greater.Than--', $strNewContent);
--> ICI $strNewContent=$this->unxmlEntities($strNewContent);
}
$objNodeNested->nodeValue = str_replace($strOldContent, $strNewContent, $objNodeNested->nodeValue);
}
static public function unxmlEntities($s)
   {
return str_replace(array(
"&amp;",
'&lt;',
'&gt;'
) , array(
"&",
'<',
'>'
) , $s);
}
Principaux fichiers impactés:
Complexité:
Contrôle:

Ajouter un test sur TestOooSimpleLayout

Thème:
Régression:

Description

Soit une famille A contenant un tableau T ayant une colonne tt de type htmlText.

Je veux faire une vue pdf de A et j'ai dans ma famille le code suivant :

public function myOOOValue($attrId, $defaultValue = "", $index = -1) 
{
return $this->getOooAttrValue($attrId, "_self", false, $index) ? : $defaultValue;
 }

et dans mon contrôleur de vue le code suivant

$tts = array();
        foreach($this->getTValue('tt') as $index=>$proc)
        {
            $tt = array(
                "V_TT"    =>    $this->myOOOValue('tt','',$index),
            );
            $tts[] = $tt;
        }

        $layout->SetBlockData("",$tts);

NB : on peut utiliser setRepeteable à la place de setBlockData le résultat est le même.

J'ai dans le fichier de template la balise [V_TT] dans une case d'un tableau.

Lorsque que je génère mon PDF si dans tt je met :

<p>je fais un test &&& @@@ <<<!!!

j'obtiens :

&lt;p&gt;je fais un test &amp;&amp;&amp; @@@ &lt;&lt;&lt;!!!

Demandes liées 1 (0 ouverte1 fermée)

Lié à Core - Anomalie #4116: [OOO Layout] Des caractères apparaissent comme des htmlentitiesIntégréNicolas Thing-Leoh25/06/2013

Actions

Mis à jour par Nicolas Thing-Leoh il y a presque 13 ans

  • Statut changé de Analysé à Assigné
  • % réalisé changé de 0 à 100

Mis à jour par Éric Brison il y a presque 13 ans

  • Statut changé de Assigné à Intégré

Appliqué par commit commit:23463917c73235c5664b65f6c07f517ca11569b4.

Actions

Formats disponibles : Atom PDF