首页 > 编程语言 >PHP和Composer做语法转换工具

PHP和Composer做语法转换工具

时间:2024-08-30 14:06:06浏览次数:12  
标签:convert php 转换 js 语法 HTML Composer PHP Markdown

原文地址:https://www.mengze2.cn/post/5/

最近不是把博客的一些文章从和HTML转到Markdown了吗,因为之前换到了wordpress所以是HTML,但是这些文章再typecho无法被解析,于是就打算开发一个Markdown2HTML工具
下面使我的开发笔记,可能比较含糊

项目结构

一般情况下,我不会这么干,但是为了文章,还是需要定义的项目结构:

markdown2html/
│
├── index.php
├── convert.php
├── styles/
│   └── bootstrap.min.css
└── js/
    └── bootstrap.bundle.min.js

Screenshot_2024_0613_144049.png

  • index.php: 前端页面,包含输入框和按钮。
  • convert.php: 后端逻辑处理,将HTML转换为Markdown或将Markdown转换为HTML。
  • styles/: 存放CSS文件。
  • js/: 存放JavaScript文件。

准备工作

下载Bootstrap

Bootstrap官方网站下载最新版本的Bootstrap,并将bootstrap.min.css放入styles/文件夹,将bootstrap.bundle.min.js放入js/文件夹。也就是所谓的按需导入

编写前端页面 (index.php)

编写前端页面,包含一个文本输入框和两个按钮,分别用于将HTML转换为Markdown和将Markdown转换为HTML。这里不要求好看,而且需要快速开发响应式页面,所以选择bootstrap

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>转换工具</title>
    <link rel="stylesheet" href="styles/bootstrap.min.css">
</head>
<body>
    <div class="container mt-5">
        <h1 class="text-center">转换工具</h1>
        <form id="convertForm" method="post">
            <div class="mb-3">
                <label for="inputText" class="form-label">Input Text</label>
                <textarea class="form-control" id="inputText" name="inputText" rows="10"></textarea>
            </div>
            <div class="d-flex justify-content-between">
                <button type="button" class="btn btn-primary" onclick="convert('html2markdown')">HTML转Markdown</button>
                <button type="button" class="btn btn-secondary" onclick="convert('markdown2html')">Markdown转HTML</button>
            </div>
            <div class="mt-3">
                <label for="outputText" class="form-label">Output Text</label>
                <textarea class="form-control" id="outputText" name="outputText" rows="10" readonly></textarea>
            </div>
        </form>
    </div>

    <script src="js/bootstrap.bundle.min.js"></script>
    <script>
        function convert(action) {
            const form = document.getElementById('convertForm');
            const formData = new FormData(form);
            formData.append('action', action);

            fetch('convert.php', {
                method: 'POST',
                body: formData
            })
            .then(response => response.text())
            .then(data => {
                document.getElementById('outputText').value = data;
            });
        }
    </script>
</body>
</html>

Screenshot_2024_0613_144216.jpg

编写后端逻辑 (convert.php)

接下来,编写后端逻辑,将HTML转换为Markdown或将Markdown转换为HTML。

<?php
require 'vendor/autoload.php'; // 使用Composer加载依赖

use League\HTMLToMarkdown\HtmlConverter;
use Michelf\Markdown;

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $inputText = $_POST['inputText'];
    $action = $_POST['action'];

    if ($action === 'html2markdown') {
        $converter = new HtmlConverter();
        $outputText = $converter->convert($inputText);
    } elseif ($action === 'markdown2html') {
        $outputText = Markdown::defaultTransform($inputText);
    }

    echo $outputText;
}
?>

Screenshot_2024_0613_144106.png

添加依赖

需要安装两个PHP库来实现转换功能:

Composer是一个包管理器,类似node的npm,和我发现PHP和Vue有异曲同工之妙

  • league/html-to-markdown: 将HTML转换为Markdown。
  • michelf/php-markdown: 将Markdown转换为HTML。

在项目根目录下创建一个composer.json文件,内容如下:

{
    "require": {
        "league/html-to-markdown": "^5.0",
        "michelf/php-markdown": "^1.9"
    }
}

Screenshot_2024_0613_144233.png

然后运行composer install来安装这些依赖。

composer install

最终效果

启动本地服务器(例如使用php -S localhost:8000),访问http://localhost:8000/,就可以看到转换工具的界面了。

标签:convert,php,转换,js,语法,HTML,Composer,PHP,Markdown
From: https://www.cnblogs.com/MengZe2/p/18388644

相关文章

  • pinpoint-php-aop 内部原理
    pinpoint-php-aop是一个支持pinpoint-phpagent的库自动注入PHP内置函数,比如redis,pdo,mysqli自动注入用户类,比如guzzlehttp,predis怎样处理内置函数内置函数解释:PHPcomesstandardwithmanyfunctionsandconstructs.Therearealsofunctionsthatrequir......
  • day15JS-es6的基础语法
     1.严格模式1.1严格模式的使用方法使用方法1:"usestrict";开启严格模式。使用方法2:<scripttype="moaule"></script> 当设置script标签为模块化时,自动启用严格模式。 1.2严格模式的限制1. 要求变量不能重名。//报错"usestrict";vara=2;vara=4; 2.......
  • 技术分享:jsx语法和应用
    首先问问大家对JSX了解多少,可以提几个问题,引发大家的思考和求知欲。然后开始讲 JSX是React架构里的东西,但是不局限于React,它是一种JavaScript的语法扩展,完全是JavaScript内部实现的,所以vue里面也能用。 JSX的优点:JSX执行更快,因为它在编译为JavaScript代码后进行了优化它是......
  • 哈萨克语语法学习(一)——名词的数
    下面开始围绕名词介绍一系列语法规则。先从名词的单复数开始。哈萨克语的名词有单数和复数之分。名词的原形为单数。名词的复数形式依据辅音同化和元音和谐等规则,借助附加成分-лар/-лер,-дар/-дер,-тар/-тер来实现。“单数”与“复数”的对立并不是“一个事物”......
  • 哈萨克语语法学习(四)——名词的格
    加足马力,把名词的语法内容学完,前几篇我们讲过了名词的两个语法范畴——数和领属人称,这次我们把名词的最后一个语法范畴,也是内容最多的一个范畴学完——格。格表示该词在句子或词组中与其他实词相结合时的种种结构关系。格附加成分可直接接在词干后边,也可以递接在复数附加成分后边......
  • 哈萨克语语法学习(二)——人称代词及谓语性人称附加成分
    这一篇学习一个新的语法概念——谓语性人称附加成分,有的语法书里把它分别当成名词和动词的语法范畴,有的语法书把它看作一个单独的语法概念,这里我们暂时选用后者(其实我觉得前者更方便理解和记忆)。在学习语法之前先学习一下人称代词,之前我们已经见过大部分了。https://youtu.be/6F......
  • 哈萨克语语法学习(六)——动词的陈述式及时态
    哈萨克语动词的式是通过动词特定的形态变化表明行为动作和现实关系的语法范畴,表示说话者对客观事物的关系。哈萨克语的式可分为:陈述式、命令式、愿望式、条件式。由动词的形态变化表达出来的、说话时行为动作和状态的不同时间意义的陈述叫陈述式。陈述式表示对一定时间范围内(现在......
  • 哈萨克语语法学习(八)——动词的态
    今天学习语态。态是确定行为动作的主体与客体之间关系的动词范畴。态附加成分可以直接加在词根后,也可以加在派生词(词干)后。从现代哈萨克语的一些词来看,态附加成分似已僵化为不可分解的语素成分。如:оян-“醒”оят-“叫醒”үйрен-“学习”үйрет-“教”中的带有反身......
  • thinkphp5跨域问题
    首先我想到的是在配置文件中加跨域header("Access-Control-Allow-Origin:*");header('Access-Control-Allow-Methods:*');header('Access-Control-Allow-Headers:x-requested-with,content-type,token');header('Access-Control-Allow-Credentials',......
  • 哈萨克语简明语法
    1.语言简介哈萨克语(原语:қазақтілі/qazaqtіlі/قازاقتىلى‎;俄语:казахскийязык;英语:Kazakhlanguage)是哈萨克斯坦共和国(ҚазақстанРеспубликасы)的国语,使用人口约1100万(2007),俄语为哈萨克斯坦的官方语言,族际交流语。......