php strip_tags, разрешить теги PHP?

Я нашел много тем с просьбой сохранить некоторые теги html, но я не нашел ни одной, которая хотела бы сохранить теги php!

Я хочу что-то вроде этого:

$myString = '<i> Hello, my name is <?php echo $firstName ?> and I'm <?php echo $age ?> </i> <div> my other div content </div>';
$myBeautifulString = strip_tags($myString, '<?php');

и результат, который я бы:

var_dump($myBeautifulString);
==> 
'Hello, my name is <?php echo $firstName ?> and I'm <?php echo $age ?> my other div content'

Мне нужно поместить содержимое этой строки в файл, поэтому мне абсолютно необходимо сохранить теги php! Значения для заполнения будут даны только после.


person Didi    schedule 28.06.2017    source источник
comment
Как показывает подсветка кода, такая строка является синтаксической ошибкой.   -  person u_mulder    schedule 28.06.2017
comment
Я знаю, мне нужно поместить $myBeautifulString в файл, а потом я заполню переменные. Это было просто, чтобы упростить пример   -  person Didi    schedule 28.06.2017
comment
Это не будет работать таким образом.   -  person u_mulder    schedule 28.06.2017
comment
Я знаю, поэтому я сказал: я хочу что-то подобное, а не это: этот код работает, я не знаю, как сохранить теги php и удалить все теги html.   -  person Didi    schedule 28.06.2017
comment
Теги PHP внутри вашей строки не будут работать так, как вы ожидаете. Вместо того, чтобы искать, как исправить непоправимое, перейдите к другому решению, без тегов php в строке.   -  person u_mulder    schedule 28.06.2017


Ответы (6)


Из руководства:

Примечание:

Комментарии HTML и теги PHP также удаляются. Это жестко задано и не может быть изменено с помощью allowable_tags.

(Мой акцент)

Вы утверждаете, что прочитали руководство, но, похоже, не заметили этого важного замечания. Таким образом, ваше решение сохранить <?php ... ?> в вашей строке состоит в том, чтобы вообще не использовать функцию strip_tags и создать свою собственную функцию с собственным списком тегов для удаления.

(Только базовый пример):

function my_strip_tags(string $string, array $tags){
     $outputString = $string;
     foreach($tags as $tag){
         $outputString = str_ireplace($tag, '', $outputString);
     }
     unset($tag);
     return $outputString;
}
person Martin    schedule 28.06.2017
comment
Не читал эту заметку.... извините. Вы правы, да, это было то, что я сделал первым, но если бы это можно было сделать одной строкой, было бы здорово, ха-ха :) Большое спасибо. - person Didi; 28.06.2017
comment
@Мартин, а, всего на 3 минуты позже :) - person Ilgıt Yıldırım; 28.06.2017

Я использовал token_get_all и str_replace для этого:

<?php

$myString = '<i> Hello, my name is <?php echo $firstName ?> and I\'m <?php echo $age ?> </i> <div> my other div content </div>';

function remove_html_tag($input)
{
  $to_return = $input;
  $tokens = token_get_all($input);
  foreach ($tokens as $token) {
    if (token_name($token[0]) == 'T_INLINE_HTML') {
      $to_return = str_replace($token[1], strip_tags($token[1]), $to_return);
    }
  }
  return $to_return;
}

function strip_html($input)
{
  return filter_var($input, FILTER_CALLBACK, ['options' => 'remove_html_tag']);
}

var_dump(strip_html($myString));

Вывод:

string(94) " Hello, my name is <?php echo $firstName ?> and I'm <?php echo $age ?>   my other div content "

Демонстрация: https://eval.in/823595

Использованная литература:

person alistaircol    schedule 28.06.2017
comment
Большое спасибо ! Это красивее, чем решение, которое у меня есть прямо сейчас :) Хороший вариант! - person Didi; 28.06.2017

Почему бы вместо этого не объединить строку?

$myString = "Hello, my name is " .$firstName. " and i'm ".$age. "</i>";
person naamhierzo    schedule 28.06.2017
comment
Я не могу объединить строки, я восстанавливаю строку с тегами php через другой API - person Didi; 28.06.2017

Удалите начальный одиночный код и заключите строку в двойной код, как показано ниже:

echo $myString = "<i> Hello, my name is $firstName and I'm  $age  </i> <div> my other div content </div>";

выполнение кода

person Narayan    schedule 28.06.2017
comment
Я знаю, что это может быть способ заполнить переменные, но это не моя точка зрения. Мне нужно поместить содержимое строки в файл. и строка должна иметь теги php, поэтому мне нужно сохранить ‹?php - person Didi; 28.06.2017

второй параметр strip_tags указывает разрешенные теги. все остальные теги будут удалены.

посетите https://www.w3schools.com/php/func_string_strip_tags.asp, чтобы узнать больше Информация

Вы не добавили , чтобы разделить два параметра

person Ashwin K Joseph    schedule 28.06.2017
comment
Я разрешил теги php, я хочу разрешить теги php, но это не работает, поэтому я задал этот вопрос. Я уже прочитал документы - person Didi; 28.06.2017
comment
Посетите сайт, который я упомянул в ответе выше, у вас должен быть , разделяющий 2 параметра. - person Ashwin K Joseph; 28.06.2017
comment
Да, была опечатка при написании вопроса, извините. У меня было это в моем коде, все еще не работает. - person Didi; 28.06.2017

   <?php
   echo $myString = "<i> Hello, my name is {$firstName} and I\'m {$age} </i> <div> my other div content </div>";

    ?>

Если у вас есть строка, содержащаяся в одиночной кавычке, и вы используете одинарную кавычку как часть строки, это сломает вашу строку, поэтому экранируйте вашу строку, как это I\'m.

person mayank    schedule 28.06.2017
comment
извините, но в моей реальной строке у меня нет одинарных кавычек, эта строка была просто для примера ^^', так что это не проблема одинарных/двойных кавычек - person Didi; 28.06.2017