正确连接来自 TinyMCE 的文本和来自 MySQL DB 的 html 文本

Concatenate properly text from TinyMCE and html text from MySQL DB

提问人:DeivDev97 提问时间:11/16/2023 更新时间:11/17/2023 访问量:51

问:

我正在开发一个使用 PHP 和 MySQL 创建报告的项目,但我想添加所见即所得的文本编辑器 TinyMCE,以便让用户可以向报告添加文本,我选择这个库来设置和自定义提供的文本,所以我创建了一个 foreach 循环来创建如下所示的文本区域:

 require_once 'queries.php';

 foreach ($parameters as $parameter) {
        echo '<p>Please, write the analysis of '. $parameter['parameter'] .'</p>';
        echo '<textarea name="analysis_'. $parameter['parameter'] .'"></textarea>';
 }

好吧,当我将信息发送到程序以生成文本并与数据库中的文本连接时,我得到了一个出乎意料的换行符或边距。

这是一个文本示例:

这是从PHP恢复数据库的文本,{{ new_text }}

该标记被替换为PHP函数,当我运行代码时,我得到了这个:

这是从PHP恢复数据库的文本,

这是来自 TinyMCE 的文本添加

但我想得到这个:

这是从PHP恢复数据库的文本,这是从TinyMCE添加的文本

我正在尝试删除 TinyMCE 编辑器,发送文本并得到我想要的结果,但这消除了使用粗体、子索引和超级索引等样式编写文本的可能性,所以我不知道当我添加 TinyMCE 编辑器时会发生什么,并且出现这个空间。

这是我在 .js 脚本中的设置:

tinymce.init({
    selector: 'textarea',
    plugins: 'autoresize',
    toolbar: 'undo redo | bold italic | superscript subscript | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | fontfamily fontsize',
    fontsize_formats: "6pt 8pt 9pt 10pt 12pt 14pt 16pt",
    menubar: false,
    toolbar_location: 'bottom',
    height: 300,
    forced_root_block_attrs : { style: 'text-align: justify;' },
});

我真的很感谢你的帮助,因为我不知道如何配置编辑器,我搜索了很多,但什么都没有。

如果您有更好的体验,如果您也可以推荐类似的编辑器,我会接受。

我尝试连接来自同一PHP的字符串并起作用,删除编辑器并起作用,尽管如果我把标记从p标签中取出,问题就会解决,但这并没有发生

javascript php html tinymce

评论

1赞 user3783243 11/16/2023
我认为您可以更改该值,然后在 .如果这是在表格中,则需要修改,以便提交。查看 tiny.cloud/docs/tinymce/6/use-tinymce-inlineselector: 'textarea'spanpspan

答:

0赞 DeivDev97 11/17/2023 #1

我发现它是该问题的简单解决方案,如果您使用 PHP 作为后端编程语言,您可以使用函数 preg_replace() 并以这种方式更改 p 标签:

$variable = preg_replace(
    "/<p\s(.+?)>(.+?)<\/p>/",
    "<span>$2</span>",
    $_POST["key"]
);

这更好,因为 p 标签和 div 标签会生成换行符,以防您需要正确连接文本,您可以研究在编写 languaje 时类似的功能来做到这一点,希望这将是其他人的解决方案。

这更好,因为 p 标签和 div 标签会生成换行符,以防您需要正确连接文本,您可以研究在编写 languaje 时类似的功能来做到这一点,希望这将是其他人的解决方案。

评论

0赞 user3783243 11/17/2023
不过,这并不能解决问题。OP 希望在 上使用 tinymce。如果他们只是想改变,最好改成使用 s。<textarea><p>echo '<p>Please, write the analysis of '. $parameter['parameter'] .'</p>';<span>
0赞 RobinJoe 11/17/2023 #2

您还可以尝试更改 TinyMCE 在添加新内容时的行为方式,或者可能最适合控制新标签。https://www.tiny.cloud/docs/tinymce/6/content-behavior-options/#newline_behaviorinvertlinebreak<p>

此外,请确保强制根块属性的格式正确:

forced_root_block_attrs: { 'style': 'text-align: justify;' },

编辑:文档和文档中的代码片段:

tinymce.init({
  selector: 'textarea',  // change this value according to your HTML
  forced_root_block_attrs: {
    'class': 'myclass',
    'data-something': 'my data'
  }
});

评论

1赞 mickmackusa 11/17/2023
所以你是说你认为密钥需要用单引号括起来?style
0赞 RobinJoe 11/17/2023
我本可以链接文档,其中包含一个示例代码片段:tiny.cloud/docs/tinymce/6/content-filtering/...。我已经用链接和示例更新了我的答案。按照文档,键用单引号括起来,并用 : 字符分隔。
1赞 mickmackusa 11/18/2023
stackoverflow.com/a/4348487/2943403
0赞 RobinJoe 11/21/2023
“报价没有区别”明白了。可能将forced_root_block设置为“p”可能会起作用?(forced_root_block: 'p',)