2013-12-08 8 views
0
<?php 
$input = nl2br($_POST['input']); 
$newStr = ''; 
$commentTokens = array(T_COMMENT); 
if (defined('T_DOC_COMMENT')) 
$commentTokens[] = T_DOC_COMMENT; // PHP 5 
if (defined('T_ML_COMMENT')) 
$commentTokens[] = T_ML_COMMENT; // PHP 4 
$tokens = token_get_all($input); 
foreach ($tokens as $token) {  
if (is_array($token)) { 
    if (in_array($token[0], $commentTokens)) 
     continue; 
    $token = $token[1]; 
} 
/*test*/ 
    $newStr .= $token; 
} 
echo $newStr; 
?> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> 
<textarea name="input" id="" cols="50" rows="30"></textarea> 
<input type="submit"> 
</form> 

По какой-то причине он не удаляет комментарии, только первую строку в начале и печатает код так, как он есть.Tokenizer не работает должным образом в php

Я делаю что-то неправильно?

ответ

0

Если вы не добавили теги open/close PHP, комментарий будет T_INLINE_HTML token.

Посмотрите на пример на token_get_all.

UPDATE:

Если Вы отправляете PHP код nl2br не имеет смысла, потому что это добавит <br> теги к коду. Попробуйте следующее:

$input = '<?php '.$_POST['input'].' ?>'; 

UPDATE2:

Если источник только HTML вы бы использовать DOM парсер. См. Пример здесь: remove comments from html source code

Если источником является сочетание PHP и HTML, вам также потребуется сочетание токенизатора и DOM-парсера. Таким образом, вы используете код, который у вас есть, и контент, который вы получаете для токена T_INLINE_HTML, который вы проанализировали бы с помощью парсера DOM.

+0

так как должен выглядеть код? –

+0

Это PHP или HTML-код или смесь, которую вы публикуете с помощью формы? – bitWorking

+0

его php-код. –

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