PHP с использованием str_replace - непреднамеренное удаление / использование preg_replace - PullRequest
0 голосов
/ 05 февраля 2019

Немного проблем.Я пишу простую функцию, чтобы избавиться от следующих символов: <> [] {}.Он просто удаляет его из ввода.

So I have:
$find = array("&lt;", "&gt;", "[", "]", "{", "}"); 
$replace = array("");
$cleanDetails = str_replace($find,$replace,$temporaryDetails);

Проблема в том, что, например, если я напишу:

Oh! This is a <?php sample text ?>

Это исключит все из <до> включены!В результате получается:

Oh! This is a

Итак (и я лучше не понимаю preg_replace) я придумываю:

$cleanDetails = preg_replace("/[\[<{}>\]]*/","",$temporaryDetails);

И он не заменит отдельные <,> {,}, [или], но удалит пары!Г!Как я могу заставить любую из них работать?

1 Ответ

0 голосов
/ 05 февраля 2019

Что происходит?

Это исключит все от <до> включенного!

Нет, это хуже: оно ничего не очистит.Вы не можете видеть <?php ...?>, потому что теги PHP недопустимы в файлах HTML, поэтому браузер автоматически преобразует его в комментарии, так как он не знает, что с ним делать, посмотрите на страницу источника:

Вы пробовали то же самое с другими строками, скажем "Oh! This is a <b>sample text </b>"?Я уверен, что вы увидите это полужирный .

Вот ваш код в оболочке PHP:

$ php -a
Interactive shell

php > $find = array("&lt;", "&gt;", "[", "]", "{", "}"); 
php > $replace = array("");
php > $temporaryDetails = 'Oh! This is a <?php sample text ?>';
php > $cleanDetails = str_replace($find, $replace, $temporaryDetails);
php > echo $cleanDetails;
Oh! This is a <?php sample text ?>

Почему это происходит?

str_replace сломан?Нет, он делает именно то, что вы сказали: заменить

  • &lt;
  • &gt;
  • [
  • ]
  • {
  • }

с пустой строкой.

Проблема просто в том, что ни одного из них нет в "<?php sample text ?>", потому что "&lt;" это , а не так же, как "<".Первая - это строка из четырех символов, вторая - из одного символа.

Посмотрите на это:

php > $temporaryDetails = 'Oh! This is a &lt;?php sample text ?&gt;';
php > $cleanDetails = str_replace($find, $replace, $temporaryDetails);
php > echo $cleanDetails;
Oh! This is a ?php sample text ?

Рабочее решение

ЧтоВы хотите, вероятно:

$find = array("<", ">", "[", "]", "{", "}");
$replace = "";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...