str_replace не работает хорошо PHP - PullRequest
1 голос
/ 16 мая 2011

У меня есть две строки, которые представляют собой строки, извлеченные из файла. Я пытаюсь сначала лишить их тегов (например), выполнив str_replace и заменив их пробелом. К сожалению, это, похоже, не работает, потому что когда я отображаю результаты в форме, я все еще вижу теги.

Есть идеи?

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

Ответы [ 5 ]

4 голосов
/ 16 мая 2011

str_replace () возвращает измененную строку.Поэтому вам нужно назначить его:

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

То же самое с $desc_new.Прочитайте документы для более подробной информации.

2 голосов
/ 16 мая 2011

str_replace возвращает строку, поэтому вы должны были сделать это:

$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 голос
/ 16 мая 2011

Как уже упоминалось в других ответах, вам необходимо присвоить возвращаемое значение, например $title_new = str_replace("<title>"," ", $title_new);, но я настоятельно рекомендую вам использовать strip_tags() по прямому назначению.

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

Также, вероятно, нет необходимости разбирать файл построчно. Было бы во много раз быстрее прочитать весь файл одновременно с чем-то вроде file_get_contents(), а затем использовать регулярное выражение или анализатор xml.

1 голос
/ 16 мая 2011
 $title_new = str_replace(array("<title>", "</title>")," ", $file_lines[$title_line]);
 $desc_new = str_replace(array("<description>","</description>")," ", $file_lines[$desc_line]);

Или используйте

strip_tags

1 голос
/ 16 мая 2011

Лучший способ удалить теги при использовании PHP - это HTMLPurifier

Я бы не стал делать что-то подобное с str_replace. Скорее всего, кто-то сделает ошибку.

...