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 :

Remplacer une chaîne de caractères dans une ifram [PHP 5.6]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Points : 132
    Points
    132
    Par défaut Remplacer une chaîne de caractères dans une ifram
    Bonjour,

    J'espère poster au bon endroit (mais vu que je débute en php, je pense que oui).

    Sous Wordpress, j'ai un plugin qui me permet d'inclure du php directement dans l'éditeur de page wordpress.
    Je m'en sers pour :
    - récupérer la date du jour
    - récupérer le contenu d'une page html dont l'url contient cette date
    - afficher le contenu de cette page dans une iframe

    Seulement, le contenu de la page récupérée contient un "document.write('" que j'aimerai supprimer.
    Comment faire?

    Mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $date_du_jour=date("d-m-Y");
    echo "[iframe http://www.influencepanel.com/apiytl?display=js&amp;date=";?><?php echo urlencode($date_du_jour);><?php echo "&amp;catid=1&amp;sort=nb_subscription 300% 10000px]";>
    La balise iframe correspond à un plugin Wordpress codé comme suit:

    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
    <?php
    function embedder_replace($matches)
    {	
    	$temp = explode(' ', $matches[1]);
        $count = count($temp);
     
    	$url = $temp[0];         
        $width = isset($temp[1]) ? $temp[1] : 200;
        $height = isset($temp[2]) ? $temp[2] : 300;
        $x = isset($temp[3]) ? $temp[3] : 0;
        $y = isset($temp[4]) ? $temp[4] : 0;
     
        if (strpos($width, 'px') === false and strpos($width, '%') === false)
        {
        	$width .= 'px'; 
        }
        if (strpos($height, 'px') === false and strpos($height, '%') === false)
        {
        	$height .= 'px'; 
        }
     
    	if (get_option('embedder_scrollmethod') == '0')
    	{ 
    		$scrollTo1 = '';
    		$scrollTo2 = 'onload="scro11me(this)"></iframe>' .
    					'<script type="text/javascript">' .
    					'function scro11me(f){f.contentWindow.scrollTo(' . $x . ',' . $y . '); }' .
    					'</script>';
    	}
    	else
    	{		
    		$scrollTo1 = '<div style="position:relative; overflow: hidden; width: ' . $width . '; height: ' . $height . '">' .
    					'<div style="position:absolute; left:' . (-1 * $x) . 'px; top: ' . (-1 * $y) . 'px">';
    		$scrollTo2 = '></iframe></div></div>';
    		$w = (int) $width;
    		$h = (int) $height;
    		$width = str_replace($w, $w + $x, $width);
    		$height = str_replace($h, $h + $x, $height);
    	}
     
        return	$scrollTo1 .
    			'<iframe class="' . get_option('embedder_class') . '" src="' . $url . '" style="width: ' . 
    			$width . '; height: ' . $height . ';' . get_option('embedder_style') . ' " frameborder="' . 
    			(int) get_option('embedder_border') . '" scrolling="' . get_option('embedder_scrolling') . '" ' . 
    			$scrollTo2;
    }
     
    function embedder_parse_iframe($text)
    {
    	return preg_replace_callback("@(?:<p>\s*)?\[iframe\s*(.*?)\](?:\s*</p>)?@", 'embedder_replace', $text);
    }
     
    add_filter('the_content', 'embedder_parse_iframe');

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    l'iframe va afficher directement la page, tu ne peux pas intervenir dessus de manière simple.
    Je te propose cependant une méthode : une page intermédiaire qui lit la source et la modifie ; et c'est cette page que tu places dans ton iframe.

    influencepanel.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <php
    $url = 'http://www.influencepanel.com/apiytl?display=js&amp;date=' . urlencode(date('Y-m-d') . '&catid=1&sort=nb_subscription';
    $content = file_get_contents($url);
    echo str_replace('document.write(xxxxx)'; ''; $content);
    ?>
    Et ton appel iframe devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "[iframe http://tonsite/influencepanel.php 300% 10000px]";>
    Si la fonction document.write n'est pas fixe, il faudra utiliser une expression régulière au lieu de str_replacE.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 335
    Points : 715
    Points
    715
    Par défaut
    Bonjour,
    Si je teste le début de l'url du premier code, http://www.influencepanel.com/apiytl?display=js, alors document.write(' apparaît en début de page.
    Si je modifie l'url en mettant html au lieu de js, http://www.influencepanel.com/apiytl?display=html, il n'apparaît plus.

    Le problème ne serait-il donc pas résolu en faisant ce remplacement dans votre premier code ?

    (Je vois que sabotage a répondu en prévisualisant, nos réponses seront peut-être complémentaires.)

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Points : 132
    Points
    132
    Par défaut
    Bonjour,

    Merci beaucoup à vous deux.
    J'ai essayé les deux méthodes.
    Celle de loralina fonctionne parfaitement.
    Celle de sabotage ne fonctionne pas. J'ai même essayé le code ci-dessous et de tester directement la page influence_panel.php mais j'ai une erreur 500.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $url = 'http://www.influencepanel.com/apiytl?display=js&amp;date=' . urlencode(date('Y-m-d') . '&catid=1&sort=nb_subscription';
    $content = file_get_contents($url);
    echo $content;
    ?>
    Je passe quand même en résolu.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Points : 132
    Points
    132
    Par défaut
    En fait, il manquait une parenthèse fermante dans urlencode(date('Y-m-d')).
    En l'ajoutant, je n'ai plus l'erreur 500 mais rien ne s'affiche.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Points : 132
    Points
    132
    Par défaut
    Ok, c'est bon. En fait, mon serveur passe par un proxy que j'ai intégré dans mon code et tout marche comme sur des roulettes

    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
    <?php
    error_reporting(~0);
    ini_set('display_errors', 1);
    $PROXY_HOST = "monproxy.tld";
    $PROXY_PORT = "port_de_monproxy";
    stream_context_set_default(
     array(
      'http' => array(
       'proxy' => "tcp://$PROXY_HOST:$PROXY_PORT",
       'request_fulluri' => true
      )
     )
    );
    $url = 'http://www.influencepanel.com/apiytl?display=js&amp;date=' . urlencode(date('Y-m-d')) . '&catid=1&sort=nb_subscription';
    echo $url;
    $content = file_get_contents($url);
    echo $content;
    ?>

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

Discussions similaires

  1. Remplacer une partie du texte dans une chaîne de caractères (Slash)
    Par Medde dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/12/2014, 13h57
  2. [MySQL] Remplacer une chaîne de caractères dans une base de données
    Par Furius dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 27/11/2013, 21h06
  3. Réponses: 7
    Dernier message: 14/12/2005, 09h53
  4. Remplacer une chaîne de caractères dans une base
    Par Furius dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/10/2005, 23h03
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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