2010-12-13 6 views
1

Je le code suivant étant repris:Retirez le texte d'une chaîne de PHP

[caption id="attachment_13" align="alignnone" width="235" caption="Event 1"] 
    <img src="image.png" /> 
[/caption] 

Je veux que la balise img à écho.

J'ai essayé d'utiliser <?php echo strip_tags($value, '<img>'); ?> mais comme la balise [caption] n'est pas une balise HTML correcte, je ne sais pas comment l'enlever. Y at-il une fonction qui va supprimer le texte d'une chaîne?

Est-ce que str_replace fonctionnerait?

Répondre

2

généralement, l'expression régulière n'est pas recommandé pour l'analyse syntaxique HTML. Mais si vous voulez juste quelque chose de rapide, vous pouvez utiliser:

<?php 

$s = '[caption id="attachment_13" align="alignnone" width="235" caption="Event 1"] 
    <img src="image.png" /> 
[/caption] '; 

if (preg_match('/<img[^>]*>/', $s, $matches)) echo $matches[0]; 

?> 

sortie:

<img src="image.png" /> 
+0

Cela a fonctionné très bien. Le problème était que la chaîne n'était pas analysée par Wordpress. Pour analyser la balise de légende, vous devez ajouter ce code: 'apply_filters ('the_content', $ value);' – hohner

0
preg_match('/\<img src=[^\>]+\>/', $value, $imgTag); 
echo $imgTag[0]; 
+0

qui va sortie 'Array', donc, s'il y a juste une utilisation match 'echo $ imgTag [0];' – stealthyninja

0

Essayez

$str = "[caption id="attachment_13" align="alignnone" width="235" caption="Event 1"] 
    <img src="image.png" /> 
[/caption] "; 
$arr = explode ('<img' , $str); 
$arr2 = explode ('>' , $arr[1]); 

echo '<img' . $arr2[0] . '>'; 
0

Vous pouvez toutefois modifier le [] avec <> puis faire la strip_tags

$replaceThis = array('[', ']'); 
$withThis = array('<', '>'); 
echo strip_tags(str_replace($replaceThis, $withThis, $value), '<img>'); 
0

essayez un peu d'expression rationnelle: http://www.php.net/manual/en/function.preg-replace.php

quelque chose comme que quelque chose devrait fonctionner avec un minimum d'adaptation (je ne travaille pas avec PHP depuis longtemps très longtemps xD):

<?php 
$pattern = '/.*(<img[^>]+)>.*/'; 
$remplacement = '$1'; 
echo preg_replace($pattern, $replacement, $value); 
?>