小白提问,怎么将富文本编辑器内的纯文本内容提取出来,然后再替换回去 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
cwj14
V2EX    程序员

小白提问,怎么将富文本编辑器内的纯文本内容提取出来,然后再替换回去
  •  
  •   cwj14 2022 年 1 月 17 日 2836 次点击

    这是一个创建于 1454 天前的主题,其中的信息可能已经有所发展或是发生改变。
    <p style="white-space: normal;"><strong>云平台及 ZStack Ceph 分布式存储版本影响:</strong></p><table><tbody><tr class="firstRow"><td width="260" valign="top" style="word-break: break-all;"><strong>产品名称</strong><br/></td><td width="260" valign="top" style="word-break: break-all;"><strong>具体影响版本</strong><br/></td><td width="260" valign="top" style="word-break: break-all;"><strong>漏洞修复版本</strong><br/></td><td width="260" valign="top" style="word-break: break-all;"><strong>支持升级云平台操作系统版本</strong><br/></td></tr><tr><td width="260" valign="top" style="word-break: break-all;">ZStack Cloud 3.x<br/></td><td width="260" valign="top" style="word-break: break-all;">1.0 ~ 3.10.20 版本<br/></td><td width="260" valign="top" style="word-break: break-all;">升级至 3.10.24 版本<br/></td><td rowspan="2" colspan="1" width="260" valign="top" style="word-break: break-all;">Centos7.4 、Centos7.6<br/></td></tr><tr><td width="260" valign="top" style="word-break: break-all;">ZStack Cloud 4.2.x<br/></td><td width="260" valign="top" style="word-break: break-all;">4.0.0 ~ 4.2.10 版本<br/></td><td width="260" valign="top" style="word-break: break-all;">升级至 4.2.16 版本<br/></td></tr><tr><td width="260" valign="top" style="word-break: break-all;">ZStack Ceph 分布式存储<br/></td><td width="260" valign="top" style="word-break: break-all;">涵盖当前所有版本<br/></td><td width="260" valign="top" style="word-break: break-all;">手动关闭存储 Elasticsearch<br/></td><td width="260" valign="top"><br/></td></tr></tbody></table><p style="white-space: normal;">注意:Centos7.2 操作系统部署的云平台环境不支持直接升级云平台至最新版本,请联系 ZStack 官方技术支持协助处理 Apache Log4j2 漏洞问题。</p><p><br/></p>
    16 条回复    2022-01-18 13:16:25 +08:00
    cwj14
        1
    cwj14  
    OP
       2022 年 1 月 17 日
    需求点是这样的,公司需要我用代码做翻译,对接了百度的 api ,我想把符文边编辑器里面的纯文本文字提取出来,翻译好了,再替换回去,PHP 语言,求求各位大佬教教我,替换回去需要保持原有的样式不变
    asLw0P981N0M0TCC
        2
    asLw0P981N0M0TCC  
       2022 年 1 月 17 日
    好像有个 htmlspecial_decode?
    shapl
        3
    shapl  
       2022 年 1 月 17 日   1
    提取出来很容易。。原封不动替换回去,有难度。
    2i2Re2PLMaDnghL
        4
    2i2Re2PLMaDnghL  
       2022 年 1 月 17 日
    正常解析 html ,文本节点投入翻译 API 替换
    jslang
        5
    jslang  
       2022 年 1 月 17 日
    正则 HTML 替换
    textVar.replace(/>([^<]+)</g, ($, text) => {console.log(text);'--------'+text+'-----------'})
    cwj14
        6
    cwj14  
    OP
       2022 年 1 月 17 日
    @shapl 我在想提取出来之后,作为数组的一个键,翻译好的作为值,然后在整个文本中替换回去
    ctro15547
        7
    ctro15547  
       2022 年 1 月 17 日
    用 re 写个脚本?
    ctro15547
        8
    ctro15547  
       2022 年 1 月 17 日
    BS4 应该也可以获取到 txt
    cwj14
        9
    cwj14  
    OP
       2022 年 1 月 17 日
    @jslang 老哥有没有 php 版本的,这个是可以的,但是是 js 的
    imicksoft
        10
    imicksoft  
       2022 年 1 月 17 日
    按 html 或 xml 解析,判断 nodeType 是 Text 的节点,把文本内容翻译后再改回去
    jslang
        11
    jslang  
       2022 年 1 月 17 日
    用这个试试呢,我没有 PHP 环境
    preg_split(">([^<]+)<", textVar)
    取奇数位索引,翻译好后,合并加上对应的"<"和">"
    jslang
        12
    jslang  
       2022 年 1 月 17 日
    在线模拟了一下,应该可以了
    ```
    $textVar = '......';

    $arr = [];
    preg_match_all("/>([^<]+)</", $textVar, $arr);
    var_dump($arr[1]);

    print_r(preg_split("/>([^<]+)</", $textVar));
    ```
    cwj14
        13
    cwj14  
    OP
       2022 年 1 月 17 日
    @jslang 真的谢谢大佬,小弟万分感谢
    Rache1
        14
    Rache1  
       2022 年 1 月 17 日
    Packagist
    https://packagist.org/?query=html%20parser

    找个合适的 parser 然后遍历节点,就好了
    chengxiao
        15
    chengxiao  
       2022 年 1 月 17 日
    你需要学一下 xpath ,然后就是遍历调接口就行了
    RickyC
        16
    RickyC  
       2022 年 1 月 18 日
    ```
    function text_from_html($html)
    {
    // Remove the HTML tags
    $html = strip_tags($html);

    // Convert HTML entities to single characters
    $html = html_entity_decode($html, ENT_QUOTES, 'UTF-8');
    $html_len = mb_strlen($html, 'UTF-8');

    // Make the string the desired number of characters
    // Note that substr is not good as it counts by bytes and not characters
    $html = mb_substr($html, 0, strlen($html), 'UTF-8');

    return $html;
    }

    $cOntent= htmlentities(text_from_html($content));
    ```
    -----
    提取出来可以试试这个。再放回去太难了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2608 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 10:43 PVG 18:43 LAX 02:43 JFK 05:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86