Partage
  • Partager sur Facebook
  • Partager sur Twitter

caractères html (code iso) et fontions strlen() / substr()

un petit soucis :)

    18 juillet 2006 à 16:23:55

    Hello, confrères zero et zerettes :).

    Voilà j'ai un petit problème :

    j'aimerais couper une chaine dans le cas ou celle-ci serait trop longue. Le problème, c'est que la-dite chaine possède des caractères html en iso (  par exemple) ce qui me pose 2 problèmes :

    - primo, si j'utilise strlen() pour vérifier la longueur d'une chaine, elle va compte chaque caractère d'un code iso qui n'est censé n'en compter qu'un seul (5 pour   au lieu de 1 O_o).

    - secondo, quand j'utiliserais substr(), il se peut que la chaine coupe en plein millieu d'un code et on se retrouve avec &# au lieu   par exemple.

    Il est bien sûr exclu de transformer les caractères ISO pour ne pas exécuter un éventuel code qu'un utilisateur mal-intentionné aurait pu mettre dans cette chaine.

    Y a t'il une solution pour palier à ces 2 problèmes ? Même si vous n'avez que la salution d'un seul, tant pis je m'en satisferais lol, merci.
    • Partager sur Facebook
    • Partager sur Twitter
      18 juillet 2006 à 16:43:04

      On peut savoir pourquoi ta chaine contient-elle ce genre de caractères ?
      • Partager sur Facebook
      • Partager sur Twitter
        18 juillet 2006 à 16:59:39

        Si c'est un champ texte ou textarea dont tu veux limiter le nombre de caractères, il faut que tu coupes la chaine avant de convertir le texte en ISO, si ce n'est pas possible il faut que tu remettes la chaine avec les caractères accentués, avec les codes ISO, que tu la coupes comme tu veux, et que tu remplaces à nouveau les caractères spéciaux par les codes ISO ;)
        • Partager sur Facebook
        • Partager sur Twitter
          18 juillet 2006 à 17:06:40

          Elle contient ce genre de caractère pour désactiver les codes html/php etc... et éviter quelques autres erreurs comme je l'ai déjà dit dans mon poste.

          Blue sn4ke, si je fais ça, est-ce que je ne risque pas d'exectuer un code php qui pourrait être contenu dans la chaine ?
          • Partager sur Facebook
          • Partager sur Twitter
            18 juillet 2006 à 17:13:00

            Quoi un code php dans la chaine ??????
            Qu'est ce qui empêche de mettre la chaine brute dans la bd, de faire un substr à la sortie et enfin un htmlspecialchars sur l'affichage, hein ?????
            Comment un code PHP pourrait il être interprêté à travers un echo ?
            • Partager sur Facebook
            • Partager sur Twitter
              18 juillet 2006 à 17:17:24

              Calme tes ardeurs, je me renseigne...

              J'utilise pas de BDD, trop de contraintes, trop de plantages, trop de code à ajouter.
              • Partager sur Facebook
              • Partager sur Twitter
                18 juillet 2006 à 17:20:20

                Citation : Snake39

                Calme tes ardeurs, je me renseigne...


                Je suis très calme là!
                Mais ce n'est pas avec tes explications trop succintes qu'on arrivera à se faire une réelle idée de ton problème.

                Citation : Snake39

                J'utilise pas de BDD, trop de contraintes, trop de plantages, trop de code à ajouter.


                Et PHP, tu l'utilises ? ^^
                Merde alors, si t'as pas envie qu'on t'aide réellement, ne dis surtout rien ! :-°
                • Partager sur Facebook
                • Partager sur Twitter
                  18 juillet 2006 à 17:26:23

                  c'est vrai Bison a raison ; le code s'exécutera si tu l'affiches pas si il est traité par PHP . Donc tu fais ta manip avec les substr() et tu encores avec htmlentities après
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 juillet 2006 à 17:27:46

                    Et on peut savoir quel mal il y a à ne pas vouloir utiliser de BDD ?

                    Et pour le problème du code, si le type écrit dans sa chaine <? blabla ?>, il n'y aura rien qui s'affichera... donc par exemple il veut monter un code php ben on pourra pas voir son code.

                    Et puis forcement je peux convertir le bordel, compter les caracters, et reconvertir la chaine transformée... mais je voulais surtout savoir il y avait pas un moyen simple de, par exemple, conter les caractères avec une fonction qui aurait pu compter un seul caractère par code iso.

                    Voilà c'est tout.

                    (et bizzardement, même avec mes "explications succintes", blue sn4ke avait compris... qu'en déduire... ?)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      18 juillet 2006 à 17:40:26

                      Citation : Snake39

                      (et bizzardement, même avec mes "explications succintes", blue sn4ke avait compris... qu'en déduire... ?)


                      Que je suis un con qui n'y connait que dalle en PHP !
                      Tu as raison, je vais me plonger dans les tutos.

                      Si la méthode de Blue sn4ke te convient tu l'utilises alors, pas de problème.

                      C'est vrai dans le fond pourquoi me casser le cul a essayer d'analyser et de comprendre les méthodes bourrin que vous employez !!!!
                      C'est pas mon code après tout.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 juillet 2006 à 17:48:00

                        Sa fait plaisir de se faire aider dans la bonne humeur par des types qui savent rester humble devant certains qui sont pas forcement aussi doué qu'eux...
                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 juillet 2006 à 18:03:14

                          ^^ pas la peine de se disputer voyons !!

                          Sinon Snake39 si c'est une chaine postée par formulaire tu récupères la chaîne, tu comptes les caractères et tu fais tes opérations PUIS tu la convertis juste avant de l'afficher.

                          Je pense que tu dois être un peu paranoïaque du piratage mais ne t'inquiète pas il n'y a aucun risque tant que tu encodes la chaîne AVANT de faire un echo() (affichage à l'écran)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 juillet 2006 à 18:13:26

                            Non c'est une chaine récupérée d'un require().

                            C'est pas pour éviter le piratage mais c'est plutôt pour une question d'efficacité on va dire.

                            En fait j'avais testé une fois ce genre de chaine et j'ai cru que le script contenu dans la chaine s'était exécuté. Enfin sa remonte à loin (un traumatisme de jeune débutant :p). Mais de toute façon si on voit pas ce qu'il y a entre les balises php de la chaine, c'est pas super non plus donc j'utilise un str_replace() pour changer les < > (comme je pourrais utiliser htmlentities() mais les codes ISO m'arrange pour d'autres trucs).

                            Bref, je vais devoir utiliser la technique de blue S., sa m'enchante pas, c'est pour ça que je venais là, pour savoir si personne ne connaissait une technique ou des fonctions plus simples à utiliser.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 juillet 2006 à 18:16:35

                              Si Bison t'a donné une technique mais tu ne sembles pas apprécier ses questions/critiques...
                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 juillet 2006 à 18:25:16

                                Si par "mettre la chaine brute dans une bd" il entend, stocker la chaine sans les codes ISO dans une base de donnée, j'ai déjà répondu.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  18 juillet 2006 à 18:28:17

                                  Tu peux extrapoler et puis faire tous les traitements que tu veux sur ta chaine brut et pas convertir en caractère ISO ...

                                  Mais vu le peu d'information que tu as donné je pense qu'il a donné la meilleure solution...
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    18 juillet 2006 à 18:42:20

                                    Je récupère ma chaine d'un fichier par require(), cette chaine possède déjà les codes ISO.

                                    Au moment où ces codes sont ajoutés, je ne peux pas executer le script avec substr()/strlen() car il faut que je conserve la chaine entière pour une autre utilisation. C'est pour cette raison que je dois la couper au moment de l'affichage.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      18 juillet 2006 à 18:49:31

                                      tu as une fonction pour faire l'inverse de htmlentities (càd convertir les entités html en caractères applicables) c'est :
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        18 juillet 2006 à 19:04:05

                                        et ce fichier où tu récupères la chaine il est remplis comment?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          18 juillet 2006 à 19:08:42

                                          Avec une écriture dans le fichier : fopen() fwrite() fclose().
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            18 juillet 2006 à 19:17:51

                                            et pourquoi les données qui y sont insérées sont en iso?
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              18 juillet 2006 à 19:24:31

                                              Je l'ai déjà dit ! Pour éviter que quelqu'un insère du code html ou php et désactiver certains caractères qui pourraient poser problème (&, ", ', $ etc...).
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                18 juillet 2006 à 19:26:09

                                                Il y a un truc de vachement bizarre dans tout ce que tu dis.
                                                Tu nous parles de code malsain possible, de caractères ISO et enfin tu nous parles de require ????
                                                Ce qui semble inquiétant, c'est de savoir que tu utilises un require sur des éléments qui pourraient contenir du code malsain ?????
                                                Tout cela est plus que bizarre, enfin bref ! ^^
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  18 juillet 2006 à 19:49:33

                                                  C'est justement pour empècher les "codes malsains" que je convertie les caractères problématiques (< > pour les codes) par leur équivalent ISO.

                                                  En gros, l'utilisateur entre via un champ de texte, le texte qu'il veut (celui-ci pouvant être ou contenir du code).

                                                  Pour désactiver cet éventuel code, au moment de l'écriture dans un fichier où sera stocké ce qu'à tapé l'utilisateur, ce qui a été écrit par l'utilisateur passe par une fonction (créé) qui va convertir les caractères problématiques (les guillemets, dolards et certains autres en faisant également parti au même titre que l'amorce et cloture de balises < et >) ;
                                                  car les données sont stockées dans le fichier de cette façon :

                                                  $variable = "truc de l'utilisateur";

                                                  donc forcement si il met un " ou $ sa fout la merde.

                                                  Mais cette donnée stockée, elle ne l'est pas pour rien, il faut bien la réutiliser (en l'occurence, l'afficher) mais comme je voudrais couper la chaine si elle est trop grosse, c'est là où intervient mon problème.

                                                  T'as compris maintenant ?
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    18 juillet 2006 à 20:13:33

                                                    Tu stockes donc dans un fichier ceci :

                                                    $var ="le texte à méga risquouille !!! <:-) ";

                                                    Si c'est bien ça alors seule la conversion des " est nécessaire...
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      19 juillet 2006 à 17:53:45

                                                      Hahaha ! Oui c'est vrai, si on veut juste que le script ne plante pas... j'espère que tu pense pas seulement à ça quand tu fais un site parce que sinon tes utilisateurs vont être content : il faut convertir les $ si tu veux qu'on les voit, il faut convertir les < > pour éviter qu'à l'affichage il l'exécute en temps que balise, il faut aussi convertir les & evidement sinon on peut se retrouver avec un code ISO alors que ce n'en est pas un.

                                                      Donc voilà, faut pas faire un script juste pour pas qu'il plante... faut encore qu'il ne pose pas de problèmes aux utilisateurs il me semble, t'es pas d'accord ?
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        19 juillet 2006 à 17:58:52

                                                        Je suis d'accords mais on te dis que c'est pas nécessaire de formater tout AVANT
                                                        Tu applique un htmlspecialchars à l'affichage et puis basta c'est bon.
                                                        Du coup tu as beaucoup moins de problèmes puisque seul les " sont convertis lorsque tu veux faire tes manips sur la chaine.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          19 juillet 2006 à 18:05:29

                                                          Snake39, tu es vraiment parano, c'est pas possible !
                                                          Je comprend mieux maintenant pourquoi tes explications sont si... secrètes.
                                                          T'as peur en nous donnnt trop d'infos de te faire hacker avec nos propres solus.

                                                          Si tu es si inquiet, si stressé, merde oublies le web et fais du tricot quoi.

                                                          Tu te fais du mal là ! :-°
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            20 juillet 2006 à 18:27:40

                                                            Evidement oui je pourrais tout faire au moment de l'affichage aussi.

                                                            Lol Bison, c'est un geek qui me donne ce conseil ? ;)

                                                            Parano de quoi ? Déjà si tu savais ce que ça voulais dire, tu ne l'aurais pas employé dans un contexte d'internet, et d'une.
                                                            Ensuite, il n'y a pas de paranoïa, il s'agit d'un script pour une messagerie perso entre membre donc il suffi qu'un mec envoie </table> (chose que n'importe quel pseudo-programmeur peut comprendre) pour fermer le tableau. Ce tableau étant en fait la liste des message, il ne voit pas les messages suivants... super pratique.

                                                            Où est la paranoïa là dedant ? Sa me semble logique d'empècher que ce genre de truc arrive, non ?

                                                            Et tu voudrais quelles explications supplémentaires ? Je t'ai décrit le script... en plus au départ je voulais juste savoir si il existait une fonction pour faire ce que j'ai décrit plus haut, je vois pas pourquoi t'aurais besoin de plus d'explications pour me dire si ces fonctions existent ou pas :-°.
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            caractères html (code iso) et fontions strlen() / substr()

                                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                            • Editeur
                                                            • Markdown