如何用段落标签包围所有文本片段? [关闭]

2023-12-10

我想在任何文本项周围放置段落标签。因此应该避免表格和其他元素。我怎么做?我想它可以用某种方式制成preg_replace?


以下是一些可以帮助您完成您想做的事情的函数:

// nl2p
// This function will convert newlines to HTML paragraphs
// without paying attention to HTML tags. Feed it a raw string and it will
// simply return that string sectioned into HTML paragraphs

function nl2p($str) {
    $arr=explode("\n",$str);
    $out='';

    for($i=0;$i<count($arr);$i++) {
        if(strlen(trim($arr[$i]))>0)
            $out.='<p>'.trim($arr[$i]).'</p>';
    }
    return $out;
}



// nl2p_html
// This function will add paragraph tags around textual content of an HTML file, leaving
// the HTML itself intact
// This function assumes that the HTML syntax is correct and that the '<' and '>' characters
// are not used in any of the values for any tag attributes. If these assumptions are not met,
// mass paragraph chaos may ensue. Be safe.

function nl2p_html($str) {

    // If we find the end of an HTML header, assume that this is part of a standard HTML file. Cut off everything including the
    // end of the head and save it in our output string, then trim the head off of the input. This is mostly because we don't
    // want to surrount anything like the HTML title tag or any style or script code in paragraph tags. 
    if(strpos($str,'</head>')!==false) {
        $out=substr($str,0,strpos($str,'</head>')+7);
        $str=substr($str,strpos($str,'</head>')+7);
    }

    // First, we explode the input string based on wherever we find HTML tags, which start with '<'
    $arr=explode('<',$str);

    // Next, we loop through the array that is broken into HTML tags and look for textual content, or
    // anything after the >
    for($i=0;$i<count($arr);$i++) {
        if(strlen(trim($arr[$i]))>0) {
            // Add the '<' back on since it became collateral damage in our explosion as well as the rest of the tag
            $html='<'.substr($arr[$i],0,strpos($arr[$i],'>')+1);

            // Take the portion of the string after the end of the tag and explode that by newline. Since this is after
            // the end of the HTML tag, this must be textual content.
            $sub_arr=explode("\n",substr($arr[$i],strpos($arr[$i],'>')+1));

            // Initialize the output string for this next loop
            $paragraph_text='';

            // Loop through this new array and add paragraph tags (<p>...</p>) around any element that isn't empty
            for($j=0;$j<count($sub_arr);$j++) {
                if(strlen(trim($sub_arr[$j]))>0)
                    $paragraph_text.='<p>'.trim($sub_arr[$j]).'</p>';
            }

            // Put the text back onto the end of the HTML tag and put it in our output string
            $out.=$html.$paragraph_text;
        }

    }

    // Throw it back into our program
    return $out;
}

第一个,nl2p(),将字符串作为输入,并在有换行符的地方将其转换为数组("\n") 特点。然后它会遍历每个元素,如果找到一个不为空的元素,则会换行<p></p>围绕它的标签并将其添加到一个字符串中,该字符串在函数末尾返回。

第二个,nl2p_html(),是前者的更复杂的版本。将 HTML 文件的内容作为字符串传递给它,它会换行<p> and </p>任何非 HTML 文本周围的标签。它通过将字符串分解为数组来实现这一点,其中分隔符是<字符,它是任何 HTML 标记的开始。然后,代码将遍历每个元素,查找 HTML 标记的末尾,并将其后面的所有内容放入新字符串中。 这个新字符串本身将分解为一个数组,其中分隔符是换行符("\n")。循环遍历这个新数组,代码查找非空元素。当它找到一些数据时,它将把它包装在段落标签中并将其添加到输出字符串中。当此循环完成时,该字符串将被添加回 HTML 代码中,并且将一起修改为输出缓冲区字符串,该字符串将在函数完成后返回。

tl;dr:nl2p() 会将字符串转换为 HTML 段落,而不留下任何空段落,nl2p_html() 会将段落标签包裹在 HTML 文档正文的内容周围。

我在几个小型 HTML 示例文件上对此进行了测试,以确保间距和其他内容不会破坏输出。 nl2p_html() 生成的代码也可能不符合 W3C,因为它会将锚点包裹在段落等周围,而不是相反。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何用段落标签包围所有文本片段? [关闭] 的相关文章

  • 如何在没有 JavaScript 的情况下预加载图像?

    在我的 HTML 页面之一上 当我将鼠标悬停在某些链接上时 会显示一些大图像 并且加载这些图像需要一些时间 我不想使用 JavaScript 来预加载图像 有什么好的解决办法吗 HTML5 有一种新方法可以做到这一点 即link prefe
  • 显示和随机化 php 数组

    我有一个显示结果的数组 如下所示 Array 0 gt 71 1 gt 56 2 gt 64 3 gt 82 4 gt 90 5 gt 80 6 gt 65 7 gt 62 8 gt 14 9 gt 3 我的代码是 while row my
  • 将 JSON 发布到 Python CGI

    我已经安装了 Apache2 并且 Python 可以工作 但我有一个问题 我有两页 一个是 Python 页面 另一个是带有 JQuery 的 Html 页面 有人可以告诉我如何让我的 ajax 帖子正常工作吗
  • 如何覆盖 bootstrap 表 td 样式?

    我正在使用 Bootstrap 3 3我有一个 HTML 代码如下 div table class table table striped tr td 03 td td 04 td td 05 td td 06 td td 07 td td
  • 如何在php中使用一张图像绘制形状

    我需要使用图像的一部分来创建帧图像 例如 用户将从后端上传图像片段 现在我需要根据前端用户的要求在前端创建一个框架 用户将选择框架的高度和宽度 然后他将选择该图像片段 如下所示 我没有办法做到这一点 我尝试通过 css 和 html can
  • json_encode 返回 NULL?

    由于某种原因 项目 描述 返回NULL使用以下代码 这是我的数据库的架构 CREATE TABLE staff id int 11 NOT NULL AUTO INCREMENT name longtext COLL
  • 付款成功后保存到数据库(paypal)

    我试图找出在客户使用 paypal 支付商品费用后将数据 之前以表单提交 保存到数据库的最佳方法 沿着这个过程的一些事情 1 在实际网站上填写表格 gt 2 登录 Paypal gt 3 立即付款 PayPal gt 4 数据已插入数据库
  • 如何在同一 PHP 页面上多次使用 mysqli fetch_assoc() 和准备好的语句?

    有没有办法启用fetch assoc 在同一页上多次使用准备好的语句 data conn gt prepare SELECT FROM some table WHERE id data gt bind param i id data gt
  • PHP 脚本不断执行 mmap/munmap

    我的 PHP 脚本包含一个循环 它只不过是回显和取消引用指针 如 tab othertab i gt 中的内容 直到昨天 这个脚本开始变得非常慢 比以前慢了 50 倍 之前 它一直运行良好 使用 strace 后 我发现 90 的情况下 脚
  • ACL授权失败后ZF3重定向

    我有一个带有 ACL 的新 ZF3 应用程序 现在 我需要在未经授权的访问的情况下重定向到错误页面 例如 403 我认为最好的方法是触发一个事件 然后捕获它 但我失败了 全部都在我的用户模块中Module php 摘录 namespace
  • PHP switch case 在 case 中存在多个值

    我有一个变量保存值 每周 每月 季度 和 年度 还有另一个变量保存值从 1 到 10 switch var2 case 1 var3 Weekly break case 2 var3 Weekly break case 3 var3 Mon
  • 设置大型电子邮件通知系统有哪些方法?

    我的公司有一个用 PHP 构建的网站 我们使用内置的 PHP 电子邮件功能每天向订阅者发送数千封电子邮件 这是一个糟糕的主意 它堵塞了我们的服务器 并且需要几个小时才能完成整个批次 现在我已经研究过像 MailChimp 这样的群发邮件服务
  • CSS - div 与父 div 底部对齐(内联块)

    我知道这个 html 很草率 有一些不必要的额外 div 但无论如何 我无法理解为什么 ID 为 info box right 的 div 与父 div 的底部对齐 您可以看到 文本 与下面的 jsfiddle 示例的底部 有什么想法可以让
  • 如何为 TBODY 应用垂直滚动条

    我的表中有 4 列和 5 行数据 我必须为 TBODY 应用垂直滚动条 TH 标题内容不应滚动 我对场景进行了编码 并且在我将滚动类应用于 TBODY 之前它工作正常 一旦我将滚动样式类应用于 TBODY 它就会破坏之前的对齐方式 任何人都
  • JavaScript 中的实时摩尔斯电码转换器

    在看到谷歌关于莫尔斯电码 gmail 的愚人节笑话后 我想我应该尝试用 javascript 创建一个实时莫尔斯电码转换器 我正在使用正则表达式和替换将莫尔斯电码更改为字符 例如 replace g a replace g r 我遇到的问题
  • 不使用控件时,视频元素在 Chrome 中消失

    So I think这是一个浏览器错误 它出现在一个更复杂的设计 网站中 但我已经进行了很好的尝试 简化了我的代码和设计等 并发现了以下内容 嵌入时
  • 使用 ImageMagick (PHP) 将 2 个图像并排合并为 1 个图像

    我认为这是一件容易的事 我有 2 张图片 JPG 我希望它们合并成一张图片 其中 2 张图片并排 所以我有图片 A 和图片 B 我想要图片 AB 并排 两个图像具有相同的宽度和高度 在本例中 宽度 200px 高度 300px 但是第二个图
  • 禁用 WooCommerce 手动/编辑订单的电子邮件通知

    需要 WooCommerce 专业知识 我需要禁用手动创建的订单的电子邮件通知 我必须使用处理状态 由于处理订单状态的自定义挂钩 我无法创建自定义状态 理想情况下 手动订单页面中可以勾选一个复选框 勾选后 它将禁止在每种状态下向客户发送电子
  • 如何将变量插入 PHP 数组?

    我在网上查了一些答案 但都不是很准确 我希望能够做到这一点 id result id info array id Example echo info 0 这有可能吗 您需要的是 不推荐 info array id Example varia
  • 使用 VBA 通过 Access 导航网页/操作 IE

    你好 StackOverflow 社区 我有一个关于使用 Access VBA 操作 IE 的问题 本质上 我正在尝试编写代码 使用 IE 打开特定网页 在该页面中搜索特定链接 目标链接的名称将取决于用户的情况 通过以编程方式单击该链接导航

随机推荐

  • 如何取消winform按钮点击事件?

    我有一个继承自 System Windows Forms Button 的自定义按钮类 我想在我的 winform 项目中使用这个按钮 该类称为 确认按钮 它显示带有 是 或 否 的确认消息 但问题是 当用户选择 否 并带有确认消息时 我不
  • 使用带有属性占位符值的 @Profile 注释

    当我们在 spring 中为任何组件定义 profile 时 我们将其声明为 Profile value Prod 但我想从属性文件中给出该值 是否可以 如果是 怎么办 通过查看Spring的源代码 我得出的结论是 你所要求的是不可能的 为
  • 如何使用ctypes的errcheck?

    The Python 库参考 版本 3 6 5 第 16 16 段 ctypes Python 的外部函数库 给出这个例子 证明输出参数 在部分函数原型 赢32获取窗口矩形功能 WINUSERAPI BOOL WINAPI GetWindo
  • Three.js:纹理全白

    编辑 以下gaitat的修复建议 我收到了一个新错误 现在该框根本不显示 我写过一个新问题来演示此错误 我有一个简单的盒子几何形状 我试图用纹理来装饰它 然而 我得到的只是一个 100 的白盒子 我写过一个简单的测试站点来论证这个问题 这是
  • 鼠标移开时隐藏 div

    我有两个 div 一个用于简短摘要 一个用于长摘要 当我将鼠标悬停在简短摘要上时 简短摘要消失并出现长摘要 当我从长摘要中 鼠标移开 时 它应该消失 而简短摘要应该出现 问题是 当我仍在长摘要的边界内但不在排序摘要的位置时 会发生 mous
  • 生成可种子数据的随机字符串

    我正在寻找一种生成随机字符串的方法nPython 中的字节类似于os urandom 方法 除了提供一种数据生成种子的方法 到目前为止我有 def genRandData size buf chr random randint 0 255
  • 该进程无法访问该文件,因为该文件正在被另一个进程使用

    我有来自特定目录的 tif 文件 我有一个函数可以读取所有 tif 文件并将其转换为文本 转换后 一旦成功转换 我将其移动到名为 Completed 的文件夹 然后将其移动失败文件夹一旦转换失败 问题是当我使用 System IO File
  • 在 C++ 中如何实现从 int 到 object 的赋值?

    class phone public phone int x num x int number void return num void number int x num x private int num int main void ph
  • 找到矩阵中的主对角线 - 方案

    我需要从方阵中提取主对角线 1 2 3 4 5 6 gt 1 5 9 7 8 9 我有以下代码 我需要替换 具有适当的功能 define diag m if null m cons m diag map m Input diag 1 2 3
  • 我如何使用 python 从键盘发送命令。我正在尝试自动化 mac 应用程序 (GUI)

    我正在尝试使用 python 自动化应用程序 我需要帮助通过 python 发送键盘命令 我正在使用 powerBook G4 您可以使用 osascript 工具从 python 脚本调用 AppleScript import os cm
  • 如何查找 PDF 中所有出现的特定文本并在上方插入分页符?

    我对 PDF 有一个棘手的要求 我需要在 pdf 中搜索特定字符串 属性编号 每次找到这个 我都需要在上面添加一个分页符 我可以访问 IText 和 Spire PDF 我首先查看 IText 我从这里的其他帖子中确定我需要使用 PDF S
  • 保留实体框架查询缓存

    我有一个 ASP NET MVC 5 Web 应用程序并使用 EF 6 1 访问我的数据库 我有一些相当复杂的 LINQ 查询 编译需要长达 10 秒的时间 但执行后只需几毫秒 EF 确实会很好地缓存此查询 并且第二次执行查询时 它会在这几
  • 从 Mac 测试 IE 的最佳工具 - 无需 PC [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 测试网站设计的跨浏览器兼容
  • 两个带有 count 的语句相除返回零

    我是 SQL 新手 使用 SQLiteStudio 并且正在尝试使用一些聚合函数 我想找到数据子集中个体数量小于 575 的比例 但查询始终返回零 SELECT A B 100 FROM SELECT COUNT AS A FROM Mal
  • 使用 RequestBody 的 POST 请求不起作用

    在下面的示例中 我使用 POST 和 GET 方法 post 是初始化一个变量 GET 是获取这个变量 我使用 Postman 来发出请求 我收到错误 RequestBody value val cant resolve method va
  • 使用自定义属性有效吗?

    我想取消任何链接并为每个链接添加额外的属性 下面是我是如何实现这一目标的 function anularEnlaces nav a each function var href this attr href var id this attr
  • C# 按字母顺序和长度对 Arraylist 字符串进行排序

    我正在尝试排序ArrayList of String Given A C AA B CC BB Arraylist Sort gives A AA B BB C CC 我需要的是 A B C AA BB CC ArrayList list
  • +0和-0一样吗?

    阅读通过ECMAScript 5 1 规范 0 and 0是杰出的 那么为什么呢 0 0评估为true JavaScript 使用IEEE 754 标准来表示数字 从维基百科 签名零为零并带有相关符号 在普通算术中 0 0 0 然而 在计算
  • Android 应用程序 - 如何获取联系人的生日

    我正在开发一个 Android 应用程序 我需要将每个联系人的生日与当前日期进行匹配 如果是的话 则处理一些业务逻辑 这需要完整的联系人详细信息 我找到了分别读取联系人生日或联系人本身的方法 但对如何将两者结合起来感到困惑 有人可以提供一些
  • 如何用段落标签包围所有文本片段? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想在任何文本项周围放置段落标签 因此应该避免表格和其他元素 我怎么做 我想它可以用某种方式制成preg replace 以下是一些可以帮助您完成您想做的事情的函数 nl2p T