2011-05-16 3 views
1

J'ai deux chaînes qui sont des lignes tirées d'un fichier. J'essaye de les dépouiller d'abord de leurs étiquettes (comme) en faisant un str_replace et en les remplaçant par un espace. Malheureusement, cela ne semble pas fonctionner parce que quand je résonne les résultats dans le formulaire je vois toujours les étiquettes.str_replace ne fonctionne pas bien PHP

Des idées?

# Trim the title and description of their tags. Keep only text. 
$title_new = $file_lines[$title_line]; 
str_replace("<title>"," ", $title_new); 
str_replace("</title>"," ", $title_new); 

$desc_new = $file_lines[$desc_line]; 
str_replace("<description>"," ", $desc_new); 
str_replace("</description>"," ", $desc_new); 

# Echo out the HTML form 
echo "<form action=\"rewrite.php\" method=\"post\">"; 
echo "Title: <input type=\"text\" name=\"new_title\" size=\"84\" value=\"".$title_new."\">"; 
echo "</input>"; 

echo "<br>Article Body:<br>"; 
echo "<textarea rows=\"20\" cols=\"100\" wrap=\"hard\" name=\"new_desc\">".$desc_new."</textarea><br>"; 

echo "<input type=\"hidden\" name=\"title_line\" value=\"".$title_line."\">"; 
echo "<input type=\"hidden\" name=\"title_old\" value=\"".$file_lines[$title_line]."\">"; 
echo "<input type=\"hidden\" name=\"desc_line\" value=\"".$desc_line."\">"; 
echo "<input type=\"hidden\" name=\"desc_old\" value=\"".$file_lines[$desc_line]."\">"; 

echo "<input type=\"submit\" value=\"Modify\" name=\"new_submit\">"; 
+0

Avez-vous essayé strip_tags? – locrizak

+1

Premier jour écrit PHP, me couper un peu de mou. – n0pe

Répondre

1
$title_new = str_replace(array("<title>", "</title>")," ", $file_lines[$title_line]); 
$desc_new = str_replace(array("<description>","</description>")," ", $file_lines[$desc_line]); 

Ou utilisez

strip_tags

+0

J'aime beaucoup les strip_tags, merci! – n0pe

4

str_replace() renvoie la chaîne modifiée. Donc, vous devez lui attribuer:

$title_new = str_replace("<title>"," ", $title_new); 

Même avec $desc_new. Lisez les documents pour plus de détails.

+0

Merde c'est la deuxième fois -_- Merci :) Je suis trop fatigué. – n0pe

+0

Pas de soucis. Par les commentaires, je suis d'accord que 'strip_tags()' pourrait être une meilleure fonction dans ce cas. –

1

La meilleure façon de dépouiller les étiquettes, lorsque vous utilisez PHP, est HTMLPurifier

Je ne voudrais pas essayer de faire quelque chose comme ça avec str_replace. Très probablement, on ferait une erreur.

2

str_replace retourne la chaîne, de sorte que vous auriez dû faire ceci:

$title_new = str_replace("<title>"," ", $title_new); 
$title_new = str_replace("</title>"," ", $title_new); 
$desc_new = str_replace("<description>"," ", $desc_new); 
$desc_new = str_replace("</description>"," ", $desc_new); 
1

Comme d'autres réponses ont mentionné que vous devez attribuer la valeur de retour comme $title_new = str_replace("<title>"," ", $title_new);, mais je vous encourage fortement à u se strip_tags() pour son usage prévu.

$buffer = strip_tags($buffer, '<title><description>') 

Il est également inutile d'analyser le fichier ligne par ligne. Il serait beaucoup plus rapide de lire tout le fichier à la fois avec quelque chose comme file_get_contents() puis d'utiliser une expression régulière ou un analyseur xml.

Questions connexes