2014-09-14 2 views
1

Используя PHP, я пытаюсь создать функцию, которая заменит конкретный комментарий открытия и закрытия HTML с открытием и закрытием PHP-тегов. Что происходит, когда я вводил прокомментированный HTML-текст в качестве темы, он внедряется в документ HTML, а затем заменяется на теги PHP. Однако, когда я ввожу что-то, кроме комментариев HTML, все в порядке - как и следовало ожидать. var_dump() возвращает строку (32) "" и NULL для $ foo и $ bar соответственно. Например, функция ниже предназначена для замены:Использование str_replace для замены HTML-комментариев с помощью PHP-тегов

<!--CODE echo"hello world"; CODE--!> 

С:

<?php echo"hello world"; ?> 

Код:

<?php 
    function code($subject){ 
     $php=array("<?php","?>"); //the replace string array 
     $html=array("<!--CODE","CODE--!>"); //the search string array 
     $subject=str_replace($html,$php,$subject); //search the subject and replace strings 
    } 
    if(isset($_POST['submit'])){ 
     $foo=$_POST['foo']; 
     $bar=code($foo); 
    } 

    ?> 

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <title>Untitled Document</title> 
    </head> 

    <body> 
    <?php 
    var_dump($foo); 
    var_dump($bar); 
    ?> 
    <form method="post" action=""> 
    <input type="text" name="foo" /> 
    <input type="submit" name="submit" value="Submit" /> 
    </form> 
    </body> 
    </html> 

Любые идеи? Буду признателен за ваш вклад.

+1

Просто небольшое примечание. Символом закрывающего комментария для комментариев HTML не является '-!>', А просто '->'. Пример: ''. – Overflowh

+0

@Overflowh Закрытие HTML-комментариев отмечено, спасибо. – TimD

ответ

0

Надеюсь, это то, что вы пытались выполнить.

<?php 
    function code($subject) { 
     $php = array("<?php", "?>"); //the replace string array 
     $html = array("<!--CODE", "CODE-->"); //the search string array 
     return str_replace($html, $php, $subject); //search the subject and replace strings 
    } 

    if(isset($_POST['foo'])) { 
     $foo = $_POST['foo']; 
     $bar = code($foo); 
    } 

?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Untitled Document</title> 
</head> 

<body> 
<?php 
if (isset($foo)) { 
    echo 'foo = '; 
    var_dump($foo); 
} 

if (isset($bar)) { 
    echo 'bar = '; 
    var_dump($bar); 
} 
?> 

<form method="post" action=""> 
<input type="text" name="foo" /> 
<input type="submit" name="submit" value="Submit" /> 
</form> 
</body> 
</html> 

Я редактировал комментарий закрывающий тег в вас $html массив со стандартным комментарием закрывающий тег HTML и редактировать третью строку вашего code() функции. Теперь значения не привязаны к $subject, но сохраняются (return str_replace($html, $php, $subject)).

+0

Благодарим вас за ввод. Однако, что происходит сейчас, функция будет заменять только ' 'на' ' соответственно. Также просматривая источник документа после отправки формы, кавычки экранируются, то есть «echo», «hello world», '. Возможно, htmlentities() может быть полезен здесь? – TimD

+0

Если я использую htmlentities() для кодирования str_replace(), то есть 'return htmlentities (str_replace ($ html, $ php, $ subject));', теги комментариев HTML будут конвертировать в теги PHP, но они отображаются в браузере и будут есть кавычки. – TimD

Смежные вопросы