broncowdd / SnippetVamp

Store, share & manage your snippets easily
46 stars 12 forks source link

Accents et quotes #10

Closed Nico207 closed 11 years ago

Nico207 commented 11 years ago

Bonjour,

voici quelques petits problèmes :

Bonne continuation.

broncowdd commented 11 years ago

Entendu, je vais regarder ça. Le bug de textarea se manifeste sous firefox et pas sous chrome. Curieusement d'ailleurs, car j'ai beau modifier le css, rien n'y fait... je dois avouer que là, je sèche... Je ne m'avoue toujours pas vaincu...

Je n'avais pas pensé aux doubles quotes: je pense qu'un simple stripslashes devrait régler le problème...

Le problème d'accents semble relever de l'encodage... je vais regarder.

En effet, si un tag contient des accents mal gérés, le comportement de la recherche peut en être affecté... Je m'y mets de suite ;) Merci

yosko commented 11 years ago

Vu le comportement étrange, j'aurais plus mis ça sur le dos d'un javascript que d'un CSS, même si je n'ai rien vu de précis validant cette hypothèse. De mon côté, voilà les comportements précis :

broncowdd commented 11 years ago

J'ai testé sans aucun js/jquip: le problème reste le même...

broncowdd commented 11 years ago

Par contre SANS LA FEUILLE DE STYLES CA MARCHE ! Argh... c'est un blème de css... (on progresse)

broncowdd commented 11 years ago

YES ! J'ai trouvé (je souïs invicibleu !) je commit la modif de la feuille direct ^^

broncowdd commented 11 years ago

C'est bon, j'ai corrigé (mais j'ai cherché un moment !)

yosko commented 11 years ago

Un "noselect" ? J'avais jamais vu ça sur des éléments de formulaire xD Effectivement je comprend maintenant.

broncowdd commented 11 years ago

c'est une balise auto_css ^^ j'avais oublié que je l'avais mise sur les li :-/

jerrywham commented 11 years ago

Pour les guillemets en revanche, c'est pas réglé...

broncowdd commented 11 years ago
Le 11/05/2013 19:53, jerrywham a
  écrit :

  Pour les guillemets en revanche, c'est pas réglé...
  —
    Reply to this email directly or view
      it on GitHub.

tu as des \" c'est ça ?
jerrywham commented 11 years ago

Oui et des \'

broncowdd commented 11 years ago
Le 11/05/2013 20:07, jerrywham a
  écrit :

  Oui et des \'
  —
    Reply to this email directly or view
      it on GitHub.

pourtant, je fais un stripslashes sur l'ensemble de la page dans le
cache_end...
curieux (encore ^^)
jerrywham commented 11 years ago

Il faut supprimer le stripslashes avant la mise en cache (ligne 293) et le mettre avant l'affichage du contenu et du titre, toujours ligne 248 :

$snippet['#contenu'] = stripslashes($snippet['#contenu']);$snippet['#titre'] = stripslashes($snippet['#titre']);

jerrywham commented 11 years ago

Ou plutôt :

$snippet['#contenu'] = stripslashes(str_replace(array(' ',"\t"),array(' ','    '),$snippet['#contenu']));$snippet['#titre'] = stripslashes($snippet['#titre']);

broncowdd commented 11 years ago
Le 11/05/2013 20:41, jerrywham a
  écrit :

  Ou plutôt :
  $snippet['#contenu'] = stripslashes(str_replace(array(
    ',"\t"),array(' ','    '),$snippet['#contenu']));$snippet['#titre']
    = stripslashes($snippet['#titre']);
  —
    Reply to this email directly or view
      it on GitHub.

C'est curieux : ça devrait produire strictement le même effet en
évitant d'exécuter un stripslashes à chaque snippet...
jerrywham commented 11 years ago

Je ne suis pas sûr qu'on puisse exécuter une fonction sur un ob_get_clean(). Peut-être sur la variable qui récupère son contenu ???

broncowdd commented 11 years ago
du coup, ça devrait marcher ...
  function
  cache_end($fichier,$duree){$donnees=ob_get_clean();$donnees=stripslashes($donnees);cache_write($fichier,$donnees,$duree);return
  $donnees;}
  Le 11/05/2013 21:26, jerrywham a écrit :

  Je ne suis pas sûr qu'on puisse exécuter une fonction sur un
    ob_get_clean(). Peut-être sur la variable qui récupère son
    contenu ???
  —
    Reply to this email directly or view
      it on GitHub.
jerrywham commented 11 years ago

Ben non, je viens de tester ça ne marche pas (ma solution oui par contre). Il doit y avoir un traitement dans le cache qui fait foirer le truc.

broncowdd commented 11 years ago
ok, j'ajoute, alors...
  Le 11/05/2013 21:30, jerrywham a écrit :

  Ben non, je viens de tester ça ne marche pas (ma solution oui
    par contre). Il doit y avoir un traitement dans le cache qui
    fait foirer le truc.
  —
    Reply to this email directly or view
      it on GitHub.
jerrywham commented 11 years ago

J'ai testé plusieurs voies et il n'y a qu'à l'affichage que stripslashes fonctionne.

jerrywham commented 11 years ago

Je te propose la manip suivante : -ajouter la fonction stripslashes_deep trouvée dans le manuel php (fonction récursive pour un tableau) :

function stripslashes_deep($value){$value = is_array($value) ? array_map('stripslashes_deep', $value):stripslashes($value);return $value;}

-supprimer le stripsalshes de la fonction cache_end (ligne 293 à peu prêt)

-modifier les fonctions unstore (ligne 229) et map_entities (ligne 241) afin d'utiliser stripslashes_deep ainsi :

function unstore($file){return stripslashes_deep(json_decode(gzinflate(file_get_contents($file)),true));}

function map_entities($chaine){return stripslashes_deep(htmlentities($chaine, ENT_QUOTES, 'UTF-8'));}

Si des snippets ont été précedemment enregistrés avec des /', il faudra les modifier à la mano...

broncowdd commented 11 years ago

La solution est bonne, mais elle m'a valu un bon moment de recherche sur un bug collatéral: en stripslachant à la serpe et récursivement via la fonction stripslash_deep (au demeurant vachement compacte et élégante) on a un effet secondaire: tous les booléens de la config (qui appelle unstore) sont convertis en string... ^^ Je me suis gratté la tête un moment avant de retrouver ^^ Je vais arranger ça ;)

jerrywham commented 11 years ago

Ah ouais. Bien vu l'aveugle ^^. J'l'avais pas vu... Mais sauf erreur de ma part, c'est à ce niveau là qu'il faut "stripslacher" (au moins le titre et le contenu).

broncowdd commented 11 years ago

J'ai simplement déplacé l'appel à la fonction vers load() au lieu de unstore: en effet load() n'est utilisée que pour les snippets alors que unstore() est appelée pour tout accès aux données (config comprise)

jerrywham commented 11 years ago

Ah ok. Je vais tester ça...

jerrywham commented 11 years ago

Je pense que les booleans sont encore impactés dans la config car là où il faut mettre true ou false dans la config, j'ai 1 ou rien. Est-ce que c'est voulu ou est-ce un bug ?

broncowdd commented 11 years ago

en fait, si tu as ce bug, il faut modifier ta config et mettre true ou false à la main: en sauvant, tout rentre dans l'ordre et les valeurs sont à nouveau booléennes...