Extraire une chaîne dans un fichier

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • Extraire une chaîne dans un fichier

    Bonjour,

    Dans le cadre de mon passage de Phoca Download à EDocman, je tente un script qui me permettra de convertir les shortcodes Phoca en shortcodes EDocman.
    Le shortcode cherché commence par "{phocadownload file=view"

    J'en suis à ce code qui me paraît bizarre, pour trouver d'abord la première occurrence !
    Code:
    $content = file_get_contents($file);
    $needle ='{ph';
    $needlef ='}';
    $pos = strpos( $content, $needlef);
    while ( $pos !== false ):
         $pos = $pos -8;
         echo $pos . '(pos) <br/>';
         $posf = strpos( $content, $needlef, $pos );
         echo $posf . ' (posf) <br/>';    
         $length = $posf - $pos - 7;
         echo $length . '(length)<br/>';
         //if ($length === 0) $length=50;    
         $chaine = mb_substr($content,$pos,$length);
         echo $chaine . '(chaine) <br/>';
         $pos = strpos( $content, $needle, $posf );
         break;
    endwhile;​​
    Si je n'enlève pas 8 à $pos, la chaîne est tronquée de "{phocado".

    Je ne comprends pas pourquoi ce décalage se produit en utilisant mb_substr()
    Qui peut m'expliquer ?
    Merci d'avance !
    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

  • #2
    Je n'ai toujours pas compris, alors j'ai essayé avec substr() et c'est bien mieux !
    Code:
    while ( $pos !== false ):
         $posf = strpos( $content, $needlef, $pos+1 );
         echo $posf . ' (pos of } - end of the phoca shortcode) <br/>';    
         $length = $posf - $pos + 1;
         echo $length . ' (length of shortcode)<br/>';
         $chaine = substr($content,$pos,$length);
         echo $chaine . ' (string to replace) <br/>';
         // chercher id= et récupérer la valeur
         $idpos = strpos($chaine,'id=');
         $idposf = strpos($chaine,'|',$idpos);
         $id = substr($chaine,$idpos + 3,$idposf - $idpos - 3);
         echo $id . ' (ID) <br/>';
         $pos = strpos( $content, $needle, $posf )-1;
         $new_chaine = '{edocmanlink ' . $id . '}';
         echo $new_chaine . ' (replacement string) <br/>';
         $content = str_replace($chaine, $new_chaine,$content);
         $pos = strpos( $content, $needle);
         echo $pos . ' (new pos of {ph) <br/><br/>';
         $i++;
    endwhile;​
    Reste à vérifier sur un clone du site si le résultat est correct.
    "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
    MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

    Commentaire

    Annonce

    Réduire
    Aucune annonce pour le moment.

    Partenaire de l'association

    Réduire

    Hébergeur Web PlanetHoster
    Travaille ...
    X