IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Detecter une url image dans un texte


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 261
    Points : 172
    Points
    172
    Par défaut Detecter une url image dans un texte
    Bonjour,

    Je suis débutant en php, j'ai un petit probléme, lorsque j’insère du texte devant une URL type image il me l'affiche entant que "lien" est non en "image".
    Auriez vous une petite idée, Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string = 'Dispersion des cendres dans l’espace https://www.simplifia.fr/info/wp-content/uploads/2015/03/dispersion-cendres-espace.png';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
       protected function url($string)
       { 
     // Image
          if(is_array(getimagesize($string))) {
            return "<img src='".$string."' id='image'/>";   
    	  }
    // Lien	  
          if (!preg_match("/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i", $string)) {
            return preg_replace("/(?i)\b((?:https?:(?:\/{1,3}|[a-z0-9%])|[a-z0-9.\-]+[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)\/)(?:[^\s()<>{}\[\]]+|\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\))+(?:\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’])|(?:(?<!@)[a-z0-9]+(?:[.\-][a-z0-9]+)*[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)\b\/?(?!@)))/", "<a href='$1' id='lien' target='_blank'>$1</a>", $string);
          } else {
    // Video Youtube
            return preg_replace("/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i",
              "<div class='embed-responsive embed-responsive-16by9'><iframe id='youtube' class='embed-responsive-item' src='//www.youtube.com/embed/$2' allowfullscreen></iframe></div>",$string);
          }
     
       }
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Teste ceci.
    Tu as mis du texte devant... ce qui fait qu'il ne peut pas reconnaître une image.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string = 'https://www.simplifia.fr/info/wp-content/uploads/2015/03/dispersion-cendres-espace.png';
    IL faut que tu fasses une autre variable genre $titre que tu passes en paramètre et qu'elle ne passe pas dans ta condition.




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
       protected function url($titre,$string)
       { 
     // Image
          if(is_array(getimagesize($string))) {
            return "<h3>".$titre."</h3><img src='".$string."' id='image'/>";   
    	  }
    // Lien	  
          if (!preg_match("/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i", $string)) {
            return "<h3>".$titre."</h3>".preg_replace("/(?i)\b((?:https?:(?:\/{1,3}|[a-z0-9%])|[a-z0-9.\-]+[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)\/)(?:[^\s()<>{}\[\]]+|\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\))+(?:\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’])|(?:(?<!@)[a-z0-9]+(?:[.\-][a-z0-9]+)*[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)\b\/?(?!@)))/", "<a href='$1' id='lien' target='_blank'>$1</a>", $string);
          } else {
    // Video Youtube
            return "<h3>".$titre."</h3>".preg_replace("/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i",
              "<div class='embed-responsive embed-responsive-16by9'><iframe id='youtube' class='embed-responsive-item' src='//www.youtube.com/embed/$2' allowfullscreen></iframe></div>",$string);
          }
     
       }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 261
    Points : 172
    Points
    172
    Par défaut
    Bonjour Dendrite,

    Merci de ton aide

    Voici l’appel de la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            $arr = array(
              "msg_id" => $row['ID'],
              "msg" => $this->emojis($this->url(htmlspecialchars($row['message'], ENT_QUOTES, 'UTF-8'))),
              "votesUp" => $row['votesUp'],
              "comments" => $this->comments_number($row['ID']),
              "time" => $this->get_time($row['time'])
            );
    L’URL type image en lui mème sans texte sa fonctionne, mon problème c'est que L’URL peut se trouvé en plein milieu d'un texte (Désolé je ne l'ai pas précisé dans le sujet).
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    ...Je suis débutant en php...
    Les codes que tu montres ne sont pas ceux d'un débutant.

    EXPLIQUE-nous ça un peu plus clairement...

    • D'où as-tu tiré cette fonction url($string) ?
    • A quoi sert-elle ?
    • d'où vient cette variable $string ?
    • ... ?

    Pas sûr qu'une fonction "fourre-tout" soit bien adaptée...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return "<img src='".$string."' id='image'/>";
    Là, toutes les images auraont le mêm id "image". Ce qui n'est pas possible.
    De plus, il manque l'attribut alt, obligatoire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          if(is_array(getimagesize($string))) {
    Je doute que ce soit comme ça que tu t'en sortiras pour les images AVEC du texte : il faut (à l'instar des autres conditions) utiliser une REGEX pour "isoler" la partie "image", et l'"habiller" de la balise <img>.

  5. #5
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 261
    Points : 172
    Points
    172
    Par défaut
    - D'où as-tu tiré cette fonction url($string) ?
    Confessions PHP

    - A quoi sert-elle ?
    elle transforme une URL en lien hypertexte cliquable.

    - d'où vient cette variable $string ?

    Fonction d'origine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    protected function url($string)
       {   
          if (!preg_match("/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i", $string)) {
            return preg_replace("/(?i)\b((?:https?:(?:\/{1,3}|[a-z0-9%])|[a-z0-9.\-]+[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)\/)(?:[^\s()<>{}\[\]]+|\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\))+(?:\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’])|(?:(?<!@)[a-z0-9]+(?:[.\-][a-z0-9]+)*[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)\b\/?(?!@)))/", "<a href='$1' id='lien' target='_blank'>$1</a>", $string);
          } else {
            return preg_replace("/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i",
              "<div class='embed-responsive embed-responsive-16by9'><iframe id='youtube' class='embed-responsive-item' src='//www.youtube.com/embed/$2' allowfullscreen></iframe></div>",$string);
          }
     
       }
    Il y a pas de prise en charge pour les URL de type image, Voilà pourquoi je veux modifier cette fonction.

    Là, toutes les images auraont le mêm id "image". Ce qui n'est pas possible.

    Oui, effectivement, il faut une CLASS.

    De plus, il manque l'attribut alt, obligatoire.

    Effectivement, je viens de lire un article à ce sujet.
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bon.

    Manifestement, cette fonction a été créée pour des liens et vidéos youtube !
    As-tu testé avec une URL youtube ?

    Je doute qu'elle soit adaptée à ton cas (texte + images + liens +...?)

    Ce que tu dois chercher (et trouver), c'est une fonction adaptée (regex ?) qui, comme je l'ai dit :
    • va chercher/isoler les URL éventuelles dans ta chaine de caractères (texte + images + liens +...?),
    • et, si il s'agit d'image, ajouter le code HTML de la balise <img>.

    Bref, pour un débutant, je trouve que tu vas un peu trop vite... avec du code que tu ne comprends pas et ne maitrises pas.

    J'ai surtout l'impression que tu fais un patchwork de bouts de code glanés par-ci par-là, non ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Question subsidiaire, qui me semble primordiale :

    • Pourquoi en es-tu arrivé à DEVOIR utiliser une fonction pour CREER les balises <img> ???

    Comment est insérée ce nom d'image dans ton texte ??
    Est-ce en relation avec l'autre post, et l'insertion des emojis dans un textarea ??

    Si tu étais un peu plus CLAIR et PRECIS dans tes explications et dans la LOGIQUE de ce que tu cherches à faire, on pourrait peut-être t'orienter vers une MEILLEURE méthode...

  8. #8
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 261
    Points : 172
    Points
    172
    Par défaut
    - As-tu testé avec une URL youtube ?
    Oui, sa fonctionne, (la fonction : "protected function url($string)") été déjà implanté dans le code.

    - Bref, pour un débutant, je trouve que tu vas un peu trop vite... avec du code que tu ne comprends pas et ne maitrises pas.
    La Oui, je suis plus à l'aise avec du langage "Delphi / Pascal" que du PHP visiblement.

    - J'ai surtout l'impression que tu fais un patchwork de bouts de code glanés par-ci par-là, non ?

    Non, Juste modifier cette fonction url($string) est ça sera le bout du monde pour moi.
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  9. #9
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 261
    Points : 172
    Points
    172
    Par défaut Code d'origine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    class Methods
    {
     
      protected function get_time($ptime)
      {
     
        $estimate_time = time() - $ptime;
     
        if ($estimate_time < 1) {
          return "1 seconde";
        }
     
        $condition = array(
          12 * 30 * 24 * 60 * 60 => 'an',
          30 * 24 * 60 * 60 => 'moi',
          24 * 60 * 60 => 'jour',
          60 * 60 => 'heure',
          60 => 'minute',
          1 => 'seconde'
        );
     
        foreach ($condition as $secs => $str) {
          $d = $estimate_time / $secs;
     
          if ($d >= 1) {
            $r = round($d);
            return $r . ' ' . $str . ($r > 1 ? 's' : '');
          }
        }
      }
     
       protected function url($string)
       {       
          if (!preg_match("/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i", $string)) {
            return preg_replace("/(?i)\b((?:https?:(?:\/{1,3}|[a-z0-9%])|[a-z0-9.\-]+[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)\/)(?:[^\s()<>{}\[\]]+|\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\))+(?:\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’])|(?:(?<!@)[a-z0-9]+(?:[.\-][a-z0-9]+)*[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)\b\/?(?!@)))/", "<a href='$1' class='lien' target='_blank'>$1</a>", $string);
          } else {
            return preg_replace("/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i",
              "<div class='embed-responsive embed-responsive-16by9'><iframe class='youtube' id='youtube' class='embed-responsive-item' src='//www.youtube.com/embed/$2' allowfullscreen></iframe></div>",$string);
          }
     
       }
     
      protected function emojis($text)
      {
        $smilies = array(
          ':smiling:' => '<img class="im" src="assets/images/emojis/1.png" alt=""/>',
          ':relieved:' => '<img class="im" src="assets/images/emojis/2.png" alt=""/>',
          ':grinning:' => '<img class="im" src="assets/images/emojis/3.png" alt=""/>',
          ':clin-doeil:' => '<img class="im" src="assets/images/emojis/4.png" alt=""/>',
          ':tongue:' => '<img class="im" src="assets/images/emojis/5.png" alt=""/>',
          ':rol-laughing:' => '<img class="im" src="assets/images/emojis/6.png" alt=""/>',
          ':frowning:' => '<img class="im" src="assets/images/emojis/7.png" alt=""/>',
          ':sleepy:' => '<img class="im" src="assets/images/emojis/8.png" alt=""/>',
          ':expressionless:' => '<img class="im" src="assets/images/emojis/9.png" alt=""/>',
          ':open-mouth:' => '<img class="im" src="assets/images/emojis/10.png" alt=""/>',
          ':neutral:' => '<img class="im" src="assets/images/emojis/11.png" alt=""/>',
          ':heart-eyes:' => '<img class="im" src="assets/images/emojis/12.png" alt=""/>',
          ':satisfied:' => '<img class="im" src="assets/images/emojis/13.png" alt=""/>',
          ':grimacing:' => '<img class="im" src="assets/images/emojis/14.png" alt=""/>',
          ':sunglasses:' => '<img class="im" src="assets/images/emojis/15.png" alt=""/>',
          ':dolar:' => '<img class="im" src="assets/images/emojis/16.png" alt=""/>',
          ':nerd:' => '<img class="im" src="assets/images/emojis/17.png" alt=""/>',
          ':star:' => '<img class="im" src="assets/images/emojis/18.png" alt=""/>',
          ':zany:' => '<img class="im" src="assets/images/emojis/19.png" alt=""/>',
          ':sweat:' => '<img class="im" src="assets/images/emojis/20.png" alt=""/>',
          ':zipper-mouth:' => '<img class="im" src="assets/images/emojis/21.png" alt=""/>',
          ':beaming:' => '<img class="im" src="assets/images/emojis/22.png" alt=""/>',
          ':big-eyes:' => '<img class="im" src="assets/images/emojis/23.png" alt=""/>',
          ':confused:' => '<img class="im" src="assets/images/emojis/24.png" alt=""/>',
          ':drooling:' => '<img class="im" src="assets/images/emojis/25.png" alt=""/>',
          ':joy:' => '<img class="im" src="assets/images/emojis/26.png" alt=""/>',
          ':winking:' => '<img class="im" src="assets/images/emojis/27.png" alt=""/>',
          ':hungry:' => '<img class="im" src="assets/images/emojis/28.png" alt=""/>',
          ':tongue-out:' => '<img class="im" src="assets/images/emojis/29.png" alt=""/>',
          ':megafrown:' => '<img class="im" src="assets/images/emojis/30.png" alt=""/>',
          ':unamused:' => '<img class="im" src="assets/images/emojis/31.png" alt=""/>',
          ':happy:' => '<img class="im" src="assets/images/emojis/32.png" alt=""/>',
          ':angry:' => '<img class="im" src="assets/images/emojis/33.png" alt=""/>',
          ':heart:' => '<img class="im" src="assets/images/emojis/34.png" alt=""/>',
          ':heart-broken:' => '<img class="im" src="assets/images/emojis/35.png" alt=""/>');
     
        return str_replace(array_keys($smilies), array_values($smilies), $text);
      }
     
      protected function sanitizeNumber($digit)
      {
        return str_replace(array('+', '-'), '', filter_var($digit, FILTER_SANITIZE_NUMBER_FLOAT));
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    class Database extends Methods
    {
      protected $configs;
      protected $db;
     
      public function __construct()
      {
        error_reporting(E_ALL);
     
        $this->configs = include("configuration/connexion.php");   
        $this->db = new mysqli($this->configs->host, $this->configs->username, $this->configs->pass, $this->configs->database);
     
        if ($this->db->connect_errno > 0) {
          die('Err Connect DB [' . $this->db->connect_error . ']');
        }
      }
     
      private function comments_number($conf_id)
      {
        $this->sql = $this->db->prepare("SELECT * FROM comments WHERE conf_id=?");
        $this->id  = $this->sanitizeNumber($tweet_id);
        $this->sql->bind_param('i', $this->id);
     
        $this->sql->execute();
     
        if (!$result = $this->sql->get_result()) {
          die('Getting Result Error: (' . $this->sql->errno . ') ' . $this->sql->error);
        }
     
        return $result->num_rows;
      }
     
      public function get_confs($value)
      {
        if ($value === '0') {
          $this->sql = $this->db->prepare("SELECT * FROM confs ORDER BY ID desc LIMIT 0,4");
        } else {
          $this->sql = $this->db->prepare("SELECT * FROM confs WHERE ID < ? ORDER BY ID desc LIMIT 0,4");
          $this->id  = $this->sanitizeNumber($value);
          $this->sql->bind_param('i', $this->id);
        }
     
        $this->sql->execute();
     
        if (!$result = $this->sql->get_result()) {
          die('Getting Result Error: (' . $this->sql->errno . ') ' . $this->sql->error);
        }
     
        while ($row = $result->fetch_assoc()) {
          $rows[] = $row;
        }
     
        if (is_array($rows) || is_object($row)) {
          $result = array();
          foreach ($rows as $row) {
            $arr = array(
              "conf_id" => $row['ID'],
              "conf_msg" => $this->emojis($this->url(htmlspecialchars($row['message'], ENT_QUOTES, 'UTF-8'))),
              "votesUp" => $row['votesUp'],
              "comments" => $this->comments_number($row['ID']),
              "time" => $this->get_time($row['time'])
            );
            array_push($result, $arr);
          }
          header('Content-Type: application/json');
          echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
        } else {
          echo "[]";
        }
      }
      }
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Voilà qui devrait faire la farce :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $string = preg_replace('/[^src="](http[^ ]*\.(png|gif|jpg|jpeg))/Ui', ' <img class="im" src="$1" alt="" />', $string);
    A ne pas mettre dans un if.

    • [^src="] : évite de re-transformer une image qui l'a DEJA été !
    • http : qui commence par http...
    • \.(png|gif|jpg|jpeg) : ...et se termine par... (extensions possibles pour des images)


    [EDIT] On peut aller un peu plus loin : en mettant le nom du fichier (sans l'extension) dans l'attribut alt !
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $string = preg_replace('/[^src="](https?:\/\/([^ ]*)\/([^ \/]*)\.(png|gif|jpg|jpeg))/Ui', ' <img class="im" src="$1" alt="$3" /> ', $string);

    Avec ton exemple, on obtient :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    Dispersion des cendres dans l’espace <img class="im" src="https://www.simplifia.fr/info/wp-content/uploads/2015/03/dispersion-cendres-espace.png" alt="dispersion-cendres-espace" />
    Dernière modification par Invité ; 07/04/2018 à 17h29.

  11. #11
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 261
    Points : 172
    Points
    172
    Par défaut
    Oui effectivement cela fonctionne .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       protected function image($string) 
       {
        return preg_replace('/[^src="](https?:\/\/([^ ]*)\/([^ \/]*)\.(png|gif|jpg|jpeg))/Ui', ' <img class="im" src="$1" alt="$3" /> ', $string);
       }
    mais ça porte confusion avec la fonction URL($string)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dispersion des cendres dans l’espace class='lien' target='_blank' <img class="im" src="https://www.simplifia.fr/info/wp-content/uploads/2015/03/dispersion-cendres-espace.png" alt="dispersion-cendres-espace" />
    Pièce jointe 368164

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->emojis($this->image($this->url(htmlspecialchars($row['message'], ENT_QUOTES, 'UTF-8')))),
    si j'appelle la fonction image($string) avent la fonction url($string) il m'affiche bien le texte avec l'image avec un petit supplément : class='lien' target='_blank' qui est une class <a href... de la fonction url($string).

    si j'appelle la fonction url($string) avent la fonction image($string) il affichera le lien image en <a href...
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  12. #12
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 261
    Points : 172
    Points
    172
    Par défaut
    J'ai tester ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
       protected function url($string)
       {  
     
        if (!preg_match("/\(https?:\/\/([^ ]*)\/([^ \/]*)\.(png|gif|jpg|jpeg))/i", $string)) {
            return preg_replace('/[^src="](https?:\/\/([^ ]*)\/([^ \/]*)\.(png|gif|jpg|jpeg))/Ui', ' <img class="im" src="$1" alt="$3" /> ', $string);
        }    
     
          if (!preg_match("/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i", $string)) {
            return preg_replace("/(?i)\b((?:https?:(?:\/{1,3}|[a-z0-9%])|[a-z0-9.\-]+[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)\/)(?:[^\s()<>{}\[\]]+|\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\))+(?:\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’])|(?:(?<!@)[a-z0-9]+(?:[.\-][a-z0-9]+)*[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)\b\/?(?!@)))/", "<a href='$1' class='lien' target='_blank'>$1</a>", $string);
          } else {
            return preg_replace("/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i",
              "<div class='embed-responsive embed-responsive-16by9'><iframe class='youtube' id='youtube' class='embed-responsive-item' src='//www.youtube.com/embed/$2' allowfullscreen></iframe></div>",$string);
          }
     
       }
    le problème c'est que les liens & les vidéos YouTube sont en simple texte , grrr dur dur le php.
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Les regex sont complexes... et difficiles à comprendre (je ne suis pas spécialiste).
    Elles sont surtout adaptées uniquement à YouTube.

    Il faudrait les adapter pour en exclure les images...
    Mais bon... Ça demande temps, logique et réflexion...

  14. #14
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 261
    Points : 172
    Points
    172
    Par défaut
    Je pense avoir résolu le problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
       protected function url($string)
       {  
     
        if (preg_match("/https?:\/\/[^ ]+?(?:\.png|\.gif|\.jpg|\.jpeg)/", $string)) {
            return preg_replace('/(https?:\/\/([^ ]*)\/([^ \/]*)\.(png|gif|jpg|jpeg))/Ui', ' <img class="im" src="$1" alt="" /> ', $string);
        }    
     
          if (!preg_match("/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i", $string)) {
            return preg_replace("/(?i)\b((?:https?:(?:\/{1,3}|[a-z0-9%])|[a-z0-9.\-]+[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)\/)(?:[^\s()<>{}\[\]]+|\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\))+(?:\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’])|(?:(?<!@)[a-z0-9]+(?:[.\-][a-z0-9]+)*[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)\b\/?(?!@)))/", "<a href='$1' class='lien' target='_blank'>$1</a>", $string);
          } else {
            return preg_replace("/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i",
              "<div class='embed-responsive embed-responsive-16by9'><iframe class='youtube' id='youtube' class='embed-responsive-item' src='//www.youtube.com/embed/$2' allowfullscreen></iframe></div>",$string);
          }
     
       }
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       protected function url($string)
       {  
     
    // Image
            return preg_replace('/[^src="](https?:\/\/([^ ]*)\/([^ \/]*)\.(png|gif|jpg|jpeg))/Ui', ' <img class="im" src="$1" alt="$3" /> ', $string);
    // video Youtube
            return preg_replace("/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i",
              "<div class='embed-responsive embed-responsive-16by9'><iframe class='youtube' id='youtube' class='embed-responsive-item' src='//www.youtube.com/embed/$2' allowfullscreen></iframe></div>",$string);
     
     
       }

  16. #16
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 261
    Points : 172
    Points
    172
    Par défaut
    Sa fonctionne que pour les images, malheureusement pour les vidéos YouTube sa fonctionne pas.
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Tant pis... ?

  18. #18
    Membre habitué Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 261
    Points : 172
    Points
    172
    Par défaut


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
       protected function url($string)
       {  
         // Image     
        if (preg_match("/https?:\/\/[^ ]+?(?:\.png|\.gif|\.jpg|\.jpeg)/", $string)) {
            return preg_replace('/(https?:\/\/([^ ]*)\/([^ \/]*)\.(png|gif|jpg|jpeg))/Ui', '<img class="rounded mx-auto d-block" src="$1" alt=""/> ', $string);
        }
     
        // Video TouTube
        if (preg_match("/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i", $string)) {
            return preg_replace("/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i",
              "<div class='embed-responsive embed-responsive-16by9'><iframe class='youtube' id='youtube' class='embed-responsive-item' src='//www.youtube.com/embed/$2' allowfullscreen></iframe></div>",$string);
        } else {
        // Lien
            return preg_replace("/(?i)\b((?:https?:(?:\/{1,3}|[a-z0-9%])|[a-z0-9.\-]+[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)\/)(?:[^\s()<>{}\[\]]+|\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\))+(?:\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\)|[^\s`!()\[\]{};:'\".,<>?«»“”‘’])|(?:(?<!@)[a-z0-9]+(?:[.\-][a-z0-9]+)*[.](?:com|net|org|edu|gov|mil|aero|asia|biz|cat|coop|info|int|jobs|mobi|museum|name|post|pro|tel|travel|xxx|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cs|cu|cv|cx|cy|cz|dd|de|dj|dk|dm|do|dz|ec|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|Ja|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)\b\/?(?!@)))/", "<a href='$1' class='lien' target='_blank'>$1</a>", $string);
          }      	
       }
    Vous ne pouvez pas faire confiance à un code que vous n'avez pas totalement rédigé vous-même.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insérer une image dans le texte, comme un caractère
    Par lo00_ dans le forum Mise en forme
    Réponses: 4
    Dernier message: 21/12/2007, 10h57
  2. Comment insérer une image dans un text block
    Par nabolo dans le forum BIRT
    Réponses: 0
    Dernier message: 07/11/2007, 17h24
  3. Insertion d'une image dans du texte dynamique
    Par djp_phillips dans le forum Flash
    Réponses: 10
    Dernier message: 18/03/2007, 19h34
  4. Réponses: 3
    Dernier message: 27/04/2006, 13h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo