tag strip_tags remove name ejemplo all php parsing

php - remove - strip_tags wordpress



¿Algún analizador PHP decente escrito en PHP? (5)

Bueno, esto no está en PHP, lo siento, pero construir este tipo de maquinaria es difícil, y PHP no es particularmente adecuado para la tarea del procesamiento del lenguaje.

Nuestro PHP Front End proporciona PHP 4.x y 5.x completos (EDIT 9/2016: ahora maneja PHP 7) el análisis sintáctico, crea automáticamente AST con todos los detalles de una gramática completa de PHP, puede generar texto fuente compilable de los AST. Esto es más difícil de lo que parece cuando considera todos los detalles complicados, incluidos literales de cadenas extraños, comentarios capturados, números con radix, etc.

Pero los AST son apenas suficientes (ya has observado que los tokens no son apenas suficientes).

La base sobre la que se basa, el kit de herramientas de reingeniería de software de DMS proporciona soporte para análisis y transformaciones arbitrarias de los AST. También leerá grandes conjuntos de archivos a la vez, lo que permite el análisis y las transformaciones en los archivos PHP.

Trabajo mucho manipulando y analizando el código PHP. Normalmente solo uso el Tokenizer para hacer esto. Para la mayoría de las aplicaciones esto es suficiente. Pero a veces el análisis con un Lexer no es lo suficientemente confiable (obviamente).

Por lo tanto, estoy buscando un analizador de PHP escrito en PHP. Encontré hnw/PhpParser y kumatch/stagehand-php-parser . Ambos se crean mediante una conversión automática de zend_language_parser.y a un archivo .y con PHP en lugar de C (y luego compilados en un analizador LALR (1)). Pero esta conversión automatizada simplemente no se puede trabajar.

Entonces, ¿hay algún analizador PHP decente escrito en PHP? (Necesito uno para PHP 5.2 y uno para 5.3. Pero solo uno de ellos también sería un buen punto de partida).


Después de que no se encontró un analizador completo y estable aquí, decidí escribir uno. Aquí está el resultado:

github.com/nikic/PHP-Parser : un analizador PHP escrito en PHP

El proyecto admite el código de análisis escrito para cualquier versión de PHP entre PHP 5.2 y PHP 7.1.

Además del analizador mismo, la biblioteca proporciona algunos componentes relacionados:

  • Compilación de AST de vuelta a PHP ("bonita impresión")
  • Infraestructura para atravesar y cambiar el AST
  • Serialización hacia y desde XML (así como el volcado en una forma legible por humanos)
  • Resolución de nombres con espacios de nombres (alias, etc.)

Para ver una descripción general del uso, consulte la sección "Uso de componentes básicos" de la documentation .


Esta no va a ser una gran opción para ti, ya que viola la restricción pura de PHP, pero:

Hace un tiempo, la gente de php-internal decidió que cambiarían a Lemon como su tecnología de análisis sintáctico. Hay una rama en el repositorio PHP svn que contiene los cambios requeridos.

Decidieron no continuar con esto , ya que descubrieron que su solución de limón es aproximadamente un 10-15% más lenta. Pero, la rama todavía está allí.

Hay un analizador de Lemon más antiguo escrito como una extensión de PHP. Es posible que puedas trabajar con eso. También hay este paquete PEAR . También está este otro paquete de limón (a través de this publicación de blog sobre PGN ).

Por supuesto, incluso si lo haces funcionar, no estoy seguro de qué harías con los datos, ni de cómo se verían los datos.

Otra opción absurda sería echar un vistazo a Quercus , una implementación de PHP en Java. Tendrían que haber escrito un analizador sintáctico, tal vez valiera la pena investigarlo.



La herramienta de métricas PHP Depend contiene código para generar un AST a partir de una fuente PHP escrita enteramente en PHP. Sin embargo, utiliza el propio token_get_all de PHP para la tokenización.

El código fuente está disponible en github: https://github.com/manuelpichler/pdepend/tree/master/src/main/php/PHP/Depend

La implementación de AST para algunas partes, como expresiones matemáticas, aún no estaba completa la última vez que lo verifiqué, pero de acuerdo con su autor ese es el objetivo.