2009-11-23 7 views
1

J'ai créé un analyseur de balisage très simple en php. Cependant, il utilise actuellement str_replace pour basculer entre le balisage et le html. Comment puis-je créer une sorte de "code" (qui utilisera finalement GeSHI) dont le contenu est intact?Construction d'un analyseur de balisage en php

À l'heure actuelle, le balisage suivant: [code][b]Some bold text[/b][/code] se termine par l'analyse en tant que zone de code avec <b>Some bold text</b>.

J'ai besoin de quelques conseils, quelle est la meilleure option?

  • Programmez une vérification chaque mot individuellement, et si elle est pas dans un [code] boîte, il doit analyser
  • le laisser tel quel, laissez les utilisateurs sont incapables d'afficher le balisage intérieur [code].
  • Créer un autre type de zone de code spécifiquement pour le balisage HTML, avoir [code] autoorevert tout < ou> à [et].

Y a-t-il peut-être même une autre option? C'est un peu plus dur que ce que je pensais que ce serait ...

EDIT: Est-il même utile d'ajouter une chose de type boîte de code à cet analyseur? Je veux dire, je vois comment cela pourrait être utile, mais c'est un gros effort pour un petit résultat.

Répondre

2

Vous pouvez le décomposer en plusieurs chaînes pour utiliser str_replace. Fractionnez les chaînes sur les balises [code] et [/ code] - en enregistrant la zone de code dans une chaîne séparée. Prenez note de l'endroit où il est allé dans la chaîne d'origine en quelque sorte. Ensuite, utilisez str_replace sur la chaîne d'origine et faites ce que vous voulez sur la chaîne de la boîte de code. Enfin, réinsérez les boîtes de code analysées et affichez. Juste un mot d'avertissement cependant, transformer l'entrée en HTML pour l'affichage me semble intrinsèquement dangereux. Je recommande une grande quantité d'assainissement d'entrée et de vérification avant de convertir en HTML pour redisplay.

+0

Il ne convertit pas tout en HTML, seulement un tableau spécifique. Et < and > sont convertis en leurs entités html;) – Cyclone

+0

Et oui, je pense que c'est ce que je vais faire. – Cyclone

+0

Ce moment où vous trouvez une réponse d'il y a 4 ans. Et êtes horrifiés par vos propres suggestions. Ce qui ne veut pas dire que cette méthode ne fonctionnerait pas, mais l'homme est loin de la solution optimale. –

3

Pourquoi voudriez-vous réinventer la roue? Il y a beaucoup de markup parsers déjà.

De toute façon, juste str_replace ne va pas aider beaucoup. Vous auriez à apprendre des expressions régulières et comme on dit, now you've got two problems;)

+0

J'aime essayer de construire des choses moi-même si possible, en plus j'ai presque fini de toute façon. En fait, str_replace fonctionne jusqu'à ce que nous atteignions le ralentisseur de la boîte de code. – Cyclone

+0

Dans mon temps, j'ai réinventé la roue à plusieurs reprises, pas parce que je suis pompeux ou n'aime pas le code des autres. Cela fait de vous un meilleur programmeur et vous donne l'expérience dont vous avez besoin. J'ai effectivement construit un analyseur de balisage une fois (qualité de production) en utilisant regex. Je peux vous dire que ce n'est pas conseillé. Les problèmes de sécurité sont un peu trop. Bien que ce soit daté, pour tous les futurs utilisateurs, si vous en construisez un, profitez de l'expérience d'apprentissage, mais je préfèrerais que vous ne l'utilisiez pas en production. – frostymarvelous

0

Pour être clair, votre problème est en deux parties. La première partie est la nécessité d'un analyseur lexical pour casser votre "code" dans les mots-clés pour votre "langue". Une fois que vous avez un analyseur lexical, vous avez alors besoin d'un analyseur. Un analyseur syntaxique est un code qui accepte les mots-clés de votre langue une par une d'une manière logique (généralement de manière récursive-descendante).