CKEditor - 修改 BBCode 输出

2024-01-12

我正在为我的网站构建一个 php 论坛应用程序(主要是为了看看我是否可以成功)。作为一名业余爱好者,我已经从事 Web 开发近 20 年了,但我总是避免使用 javascript - 这意味着我已经非常擅长使用 html、css 和 php,但当涉及到客户端脚本。

无论出于何种意图和目的,我的论坛都有效。用户可以根据他们的用户级别和权限等注册、发布、编辑、查看和删除帖子。但是我有一个问题让我发疯,因为我无法解决它:

我使用带有 BBCode 插件的 CKEditor 作为 WYSIWYG 线程编辑器。在服务器端,我使用 PHP 的 PEAR 模块来解析 BBCode 并显示正确的 html。 PEAR模块支持以下格式的图像标签[img width={width} height={height}]{url}[/img]但默认情况下,CKEditor 的 BBCode 插件会去掉调整大小功能,只允许我使用[img]{url}[/img]类型标签。

我已经设法扩展插件来处理一些其他标签(s、sup、sub、font 等),但这些只需将它们添加到插件开头附近的 bbCode 列表中即可。 img 标签的处理方式不同,但如果没有扎实掌握 javascript,我很难完全理解源代码来添加我自己的逻辑。无论我做什么,宽度和高度属性都会从图像标签中删除。

有没有人有扩展 CKEditor BBCode 插件的方法,以便我可以保留图像的宽度和高度属性?我意识到以前曾有人问过类似的问题,但据我所知,没有一个问题得到直接回答。

这是 CKEditor 插件的链接:http://ckeditor.com/addon/bbcode http://ckeditor.com/addon/bbcode(我使用的是4.4.7版本) 和 CKEditor 本身:http://ckeditor.com/download http://ckeditor.com/download(我使用的是 4.4.7 的完整版本)。

我的 bbcode 地图是:

	var bbcodeMap = {
	    b: 'strong',
	    u: 'u',
	    i: 'em',
	    color: 'span',
	    size: 'span',
	    quote: 'blockquote',
	    code: 'code',
	    url: 'a',
	    email: 'span',
	    img: 'span',
	    '*': 'li',
	    list: 'ol',
	    sup: 'sup',
	    sub: 'sub',
	    s: 's',
	    font: 'span'
	  },
	  convertMap = {
	    strong: 'b',
	    b: 'b',
	    u: 'u',
	    em: 'i',
	    i: 'i',
	    code: 'code',
	    li: '*',
	    sup: 'sup',
	    sub: 'sub',
	    s: 's'
	  },
	  tagnameMap = {
	    strong: 'b',
	    em: 'i',
	    u: 'u',
	    li: '*',
	    ul: 'list',
	    ol: 'list',
	    code: 'code',
	    a: 'link',
	    blockquote: 'quote',
	    sup: 'superscript',
	    sub: 'subscript',
	    font: 'font',
	    s: 'strike'
	  },
	  stylesMap = {
	    color: 'color',
	    size: 'font-size',
	    font: 'font-family'
	  },
	  attributesMap = {
	    url: 'href',
	    email: 'mailhref',
	    quote: 'cite',
	    list: 'listType'
	  };

初始化 HTML 为:

<textarea style="width: 100%; height: 200px;" name="post_content">

</textarea>

<script>
  CKEDITOR.replace('post_content', {
    extraPlugins: 'bbcode',
    // Remove unused plugins.
    removePlugins: 'bidi,dialogadvtab,div,filebrowser,flash,forms,format,horizontalrule,iframe,justify,liststyle,pagebreak,showborders,stylescombo,table,tabletools,templates',
    // Width and height are not supported in the BBCode format, so object resizing is disabled.
    disableObjectResizing: false,
    // Define font sizes in percent values.
    fontSize_sizes: "30/30%;50/50%;100/100%;120/120%;150/150%;200/200%;300/300%",
    toolbar: [
      ['Source', '-', 'Undo', 'Redo'],
      ['Find', 'Replace', '-', 'SelectAll', 'RemoveFormat'],
      ['Link', 'Unlink', 'Image', 'Smiley', 'SpecialChar'],
      ['Bold', 'Italic', 'Underline', 'Superscript', 'Subscript', 'Strike'],
      ['Font', 'FontSize'],
      ['TextColor'],
      ['NumberedList', 'BulletedList', '-', 'Blockquote'],
      ['Maximize', '-', 'Preview']
    ],
    // Strip CKEditor smileys to those commonly used in BBCode.
    smiley_images: [
      'regular_smile.png', 'sad_smile.png', 'wink_smile.png', 'teeth_smile.png', 'tongue_smile.png',
      'embarrassed_smile.png', 'omg_smile.png', 'whatchutalkingabout_smile.png', 'angel_smile.png',
      'shades_smile.png', 'cry_smile.png', 'kiss.png'
    ],
    smiley_descriptions: [
      'smiley', 'sad', 'wink', 'laugh', 'cheeky', 'blush', 'surprise',
      'indecision', 'angel', 'cool', 'crying', 'kiss'
    ]
  });
</script>

None

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

CKEditor - 修改 BBCode 输出 的相关文章

  • Jest 中从未调用图像 onLoad 处理程序

    我正在尝试使用 Jest 测试将 dataUrl 加载到图像中 我正在使用 JSDOM 并按照说明添加resources usable 作为一个选项 如果我直接从 Node 运行该代码 则该代码可以工作 但是当我尝试在 Jest 中运行它时
  • 如何使用nodeJS SFTP客户端列出所有子目录?

    有趣的节点 JS ssh2 sftp client 我想列出给定路径中的所有目录及其子目录 let sftp new ssh2SftpClient console log sftp sftp connect host xx xxx xxx
  • angularjs 自定义过滤器检查数据数组内的值

    我有两个过滤器 它们根据数据中的队列键过滤数据 这是我的代码 var app angular module app app controller mainController function scope Data object scope
  • 如何监控浏览器中发出的所有自定义事件?

    我想监视网络浏览器中触发的所有自定义事件 任何标准浏览器都可以 需要明确的是 我知道您可以附加事件处理程序来查看何时触发 通常 事件 但如何可靠地检测嵌入对象或 jQuery 脚本是否触发自定义事件 我可以重构浏览器源代码来挂钩事件循环 但
  • Object.assign() - 奇怪的行为需要解释

    我有这个代码 function margeOptions options passedOptions options Object assign options passedOptions let passedOpts a true let
  • 将参数传递给 jquery 单击事件中的回调函数[重复]

    这个问题在这里已经有答案了 直接进入正题 我有一个 jquery 事件监听器 如下所示 number click printNumber 和一个回调函数 function printNumber number console log num
  • 使用 JavaScript 填写 PDF 表单

    这就是我所拥有的 用户填写很长的 html 表单 用户获取下载不同 pdf 的链接 这是可填写的表格 链接是使用 javascript 生成的 用户单击链接 生成 url 使用用户之前提交的数据 在表单中处理数据并完成字段 这是在表单内使用
  • 拖放图像上传在服务器上不起作用

    我正在尝试实现拖放图像上传 我在网上找到了一个相当简单的脚本并适合我的使用 在我的本地安装中 文件上传得很好 但在服务器上却不行 从我的调试尝试来看 SERVER HTTP X FILENAME 甚至没有被 php 设置 我尝试了以下方法
  • 表单提交不起作用

    我有一张桌子 可以打印出所有可用的相机 它使用表单来更改这些设置 问题在于该表单仅更新条目中的最后一个摄像机 换句话说 如果我更改表单并为列表中的最后一个摄像机点击 应用 它将起作用 如果我更改此列表中任何其他摄像机的表单 它会将其更改为与
  • 通过电子邮件发送在 HTML5 画布上创建的图像

    我有一个画布 用户可以通过交互来更改设计 现在 用户完成更改后 可以提交他的设计及其电子邮件 ID 但为了提交设计 我使用以下方法将画布转换为图像http www nihilogic dk labs canvas2image http ww
  • 函数声明或函数表达式

    我刚刚在块作用域中定义函数时遇到了问题 考虑以下程序 try greet function greet alert Merry Christmas catch error alert error 我希望这个程序能够发出警报Merry Chr
  • 如何混淆或使 JavaScript 文件不可读?

    我的应用程序中有 JavaScript 脚本 其中包含 JavaScript 和 jQuery 函数 所有用户与我的应用程序的交互都是动态的 并且通过 jQuery 传递到应用程序 我意识到 当我在客户端运行我的应用程序时 客户端可以通过查
  • 传单 - 导入 Geojson - Angular 6

    我尝试将 GeoJson 文件导入到 Angular 的应用程序 6 中的传单中 通过这个解决方案 我的 geojson 是在 leafletmap 中绘制的 但我有这个错误 我无法构建我的应用程序 有人知道一种解决方案吗 错误 TS234
  • jQuery live() 和ready() 之间的区别?

    两者之间的确切区别是什么live and ready 编辑 发现die http docs jquery com Events die是相反的live ready http docs jquery com Events ready让你注册一
  • Node.js - Async.js:并行执行如何工作?

    我想知道 async js 中并行执行是如何工作的 async require async async parallel function callback for var i 0 i lt 1000000000 i Do nothing
  • Javascript/DOM:如何删除 DOM 对象的所有事件侦听器?

    只是问题 有没有办法完全删除对象的所有事件 例如一个div 编辑 我添加每div addEventListener click eventReturner false 一个事件 function eventReturner return f
  • router.navigate 使用查询参数 Angular 5

    我在使用查询参数路由到路由时遇到问题我有一个像这样的函数 goToLink link this router navigate link split 0 queryParams this sortParams link 和这个功能 sort
  • jVectorMap - 向下钻取地图 - 自定义背景

    我正在使用 jVectorMap 中的向下钻取地图 并且尝试将自定义背景颜色设置为地图的第二层 为了自定义主级别 我使用 main 参数 但我不知道如何将其扩展到地图的较低级别 提前致谢 马切伊 None
  • 谷歌地图绘制两点之间的路线

    我编写了这段无辜的 JavaScript 代码 它允许用户创建两个标记并绘制它们之间的路线 它不起作用 相反 它给出了一个奇怪的错误 Uncaught TypeError Cannot read property ya of undefin
  • ES6解构对象赋值函数参数默认值

    您好 我正在查看在传递函数参数时使用对象解构的示例对象解构演示 https developer mozilla org en US docs Web JavaScript Reference Operators Destructuring

随机推荐