str_replace no funciona bien PHP

Tengo dos cadenas que son líneas extraídas de un archivo. Primero estoy tratando de despojarlos de sus etiquetas (como) haciendo un str_replace y reemplazándolos con un espacio. Desafortunadamente, esto no parece estar funcionando porque cuando hago eco de los resultados en el formulario, todavía veo las etiquetas.

¿Alguna idea?

# 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\">";

preguntado el 16 de mayo de 11 a las 17:05

Primer día escribiendo PHP, déjame un poco de holgura. -

5 Respuestas

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

O usar

strip_tags

contestado el 16 de mayo de 11 a las 21:05

str_replace () devuelve la cadena modificada. Entonces necesitas asignarlo:

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

Lo mismo con $desc_new. Lea los documentos para obtener más detalles.

contestado el 16 de mayo de 11 a las 21:05

Maldita sea, es la segunda vez -_- Gracias :) Estoy demasiado cansada. - n0pe

Sin preocupaciones. Según los comentarios, estoy de acuerdo en que strip_tags() podría ser una función mejor en este caso. - Jason McCreary

str_replace devuelve la cadena, por lo que debería haber hecho esto:

$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);

contestado el 16 de mayo de 11 a las 21:05

La mejor manera de eliminar etiquetas, cuando se usa PHP, es HTMLPurifier

No intentaría hacer algo así con str_replace. Lo más probable es que uno cometa un error.

contestado el 16 de mayo de 11 a las 21:05

Como han mencionado otras respuestas, debe asignar el valor de retorno como $title_new = str_replace("<title>"," ", $title_new);, pero te animo a que uses strip_tags() para su propósito previsto.

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

También es probable que no sea necesario analizar el archivo línea por línea. Sería mucho más rápido leer todo el archivo a la vez con algo como file_get_contents() y luego use una expresión regular o un analizador xml.

contestado el 16 de mayo de 11 a las 21:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.