七零部落格
思则大道至简,疑则谜团重重!
思则大道至简,疑则谜团重重!
<?php /** * @Author 70(QQ781787584) * * @link http://www.qiling.org * * @Copyright 2014-12-09 00:32:10 * */ header ( "Content-type: text/html; charset=utf-8" ); // $content = file_get_contents ( 'demo.php' ); $content = file_get_contents ( __FILE__ ); $result = token_get_all ( $content ); // 遍历数组 使用指针 $string = ''; $space = false; // print_r($result); while ( current ( $result ) ) { $value = current ( $result ); if (is_string ( $value )) { // 去掉字符左侧的 空白 if ($space) { $string = rtrim ( $string ) . $value; } else { $string .= $value; } // 去掉字符右侧的 空白 添加一个标记 如果为 True需要删除右侧的空白 如果 为 false 不需要删除右侧的空白 $space = true; } else { switch ($value [0]) { // 去掉php开始标记中的空格 case T_OPEN_TAG : $string .= trim ( $value [1] ) . ' '; //这样做了能删除各种注释下的多余空格 如果没有下边这句会造成有多余空格 如 <?php /**/,<?php // , <?php echo //虽然我这样做了 ^_^ 但是我没想明白... $space = true; break; // 把空白字符全部转换为 空格 case T_WHITESPACE : if ($space == false) { $string .= ' '; $space = true; } break; // 去掉注释 case T_DOC_COMMENT : $space = true; break; // 去掉注释 case T_COMMENT : $space = true; break; // 判断定界符开始 case T_START_HEREDOC : $space = false; $string .= "<<<S "; break; // 判断定界符结束 case T_END_HEREDOC : $space = true; $string .= "S; "; //因为这里取到的值是不带 分号 ; 的 这里直接 跳过下个元素的处理 注:不知道会不会存在问题 测试没问题 next ( $result ); break; default : // 去掉某些 左右 的空白 你可以添加更多你认为两边可以删除空白的标记 目前我找到这些 $array = array ( T_CONCAT_EQUAL, // .= T_DOUBLE_ARROW, // => T_BOOLEAN_AND, // && T_BOOLEAN_OR, // || T_IS_EQUAL, // == T_IS_NOT_EQUAL, // != or <> T_IS_SMALLER_OR_EQUAL, // <= T_IS_GREATER_OR_EQUAL, // >= T_INC, // ++ T_DEC, // -- T_PLUS_EQUAL, // += T_MINUS_EQUAL, // -= T_MUL_EQUAL, // *= T_DIV_EQUAL, // /= T_IS_IDENTICAL, // === T_IS_NOT_IDENTICAL, // !== T_DOUBLE_COLON, // :: T_PAAMAYIM_NEKUDOTAYIM, // :: T_OBJECT_OPERATOR, // -> T_DOLLAR_OPEN_CURLY_BRACES, // ${ T_AND_EQUAL, // &= T_MOD_EQUAL, // %= T_XOR_EQUAL, // ^= T_OR_EQUAL, // |= T_SL, // << T_SR, // >> T_SL_EQUAL, // <<= T_SR_EQUAL // >>= ); if (in_array ( $value [0], $array )) { $string = rtrim ( $string ) . $value [1]; ;;;;;;;;;;; //有强迫症的可以继续删除 多余 的分号 我就不删除了 } else { $string .= $value [1]; } $space = in_array ( $value [0], $array ); break; } } next ( $result ); } echo $string;