使用 preg_replace() 将图像占位符转换为 HTML 标记

2023-11-30

我想用有效的 HTML 标记替换方括号图像占位符。

示例占位符可能如下所示:

[img:http://example.com/_data/025_img.jpg]

我想要的是改变它所说的部分[img: ... ] with <img>标记并得到如下结果:

<img src='http://example.com/_data/025_img.jpg' border='0' />

有关用户上传的与此任务相关的图像的其他信息:

  1. 用户将图像上传到他们的个人资料
  2. 图像名称存储在 db 中。
  3. 它们列在具有文本区域的表单旁边
  4. 在输入文本时,我想通过添加以下标签向用户提供一个或多个图像[img: ... ] where ...是单击用户图库中列出的图像时将复制的链接。
  5. 我正在使用 Codeigniter 并将文本区域通过视图传递到控制器->模型中,在其中由助手对各种内容进行清理...sql/quotes 等。CI 上也启用了 XSS;
  6. 然后我想扫描文本并查看用户在哪里[img: ... ]标记并将其交换为<img>使用图像和文本标记并呈现帖子。

因此,用户的实际输入将类似于:

The brown fox jumped over foo bar [img:http://example.com/_data/025_img.jpg] and then went to bed [img:http://example.com/_data/0277_img.jpg] while thinking about [img:http://example.com/_data/1115_img.jpg]

这就是我要求的原因preg_replace(), 而不是preg_match(). preg_match()不会使文本跟随图像。


让我们先把简单的事情解决掉。

/\[img:([^\]]+)\]/

That is:

  • 字面意思[img:
  • a capture group containing
    • a character class composed of
      • 不是字面意思的东西]
    • 至少重复一次
  • 字面意思]

运行这个preg_match匹配数组中的元素 1 很可能是一个图像 URL,您可以轻松地将其插入到img tag.

但你不应该。不是马上。

首先,这是不安全的。当我写下这篇文章时会发生什么?

[img:javascript:alert(document.cookie);]

呃。那不会有什么好事。

You're probably想要确保用户声称是 URL 的东西确实是 URL。您可以尝试通过致电来执行此操作parse_url。它会返回一组 URL 组件。确保事物具有域和路径,并且通过 HTTP 或 HTTPS 提供服务。

好的,但是当用户输入时会发生什么this?

[img:http://www.example.com/foo.jpg" onmouseover="alert(document.cookie)"]

这是一个有效的...ish... URL,将被成功解构parse_url并且很可能通过基本的格式良好检查。过滤掉空格和引号(单anddouble) 将是一个很好的起点,但还有更多事情需要担心。

最重要的是,像这样的标记是一个向量XSS, or 跨站脚本漏洞.

You can probably通过传递 URL 来减轻一些威胁htmlspecialchars。这至少会破坏引号和括号,而且很难对那些被处理过的东西感到讨厌。请注意字符集的愚蠢之处,某些非 UTF-8 字符编码可能包含 ASCII 引号的内容...

You probably想要为此使用真正的标记语言(即使只是降价),并且您probably想要使用基于白名单的 HTML 过滤器,例如HTML 净化器关于结果。这将有助于保护您免受某种程度的精神错乱。

请记住,只有当他们aren't出来找你。网络上充满了愚蠢到恶意的人,以及恶意到愚蠢的人。

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

使用 preg_replace() 将图像占位符转换为 HTML 标记 的相关文章

  • 如何将日期/时间从 24 小时格式转换为 12 小时 AM/PM? [复制]

    这个问题在这里已经有答案了 我从数据源中获取以下格式的日期和时间 19 24 15 06 13 2013 我需要将其转换为 12 小时 AM PM 格式 不带秒 所以上面的时间是晚上 7 24 日期应保留为 mm dd yyyy 格式 在
  • 验证数据库匹配中的 $_GET id 是否足够安全?

    我的网站上有 2 个页面 一个是 index php 索引页面列出了数据库中存在的所有帖子 另一个页面是 post php 当单击索引页面上的特定帖子时 帖子页面显示单个帖子 现在我用来列出 index php 上所有帖子的代码是 post
  • 登录代码示例已通过 SQL 注入被黑客攻击,尽管 mysql_real_escape_string...

    我使用 CodeIgniter 但在黑客攻击方面遇到了麻烦 是否可以对以下登录代码进行 SQL 注入 function process login username mysql real escape string this gt inpu
  • SVG 坐标与变换矩阵

    我想在矩形元素上实现像 svg edit 这样的功能 旋转矩形 调整大小 Drag 旋转 SVG 矩形效果很好 但是当我想调整矩形大小时 它就会出现问题 坐标不正确 我使用变换矩阵来旋转targetelement setAttribute
  • 如何在 Cakephp 3 中创建按字段集分组的多个复选框

    我在阅读本文档时遇到问题 Cakephp3 Cookbook 表单 创建选择选择器 http book cakephp org 3 0 en views helpers form html creating select pickers我尝
  • Yii 框架:控制器/操作 url 和参数

    在我的申请中 我有ApiController with actionUsers 所以在 YII 中路径变成api users 现在为了获取某些用户信息 我使用以下路径api users id 10其中 10 是用户 ID id路径的一部分基
  • 代码点火器 JSON

    你好 我使用 codeigniter 然后我从控制器中的数据库中回显输出 然后在我的视图文件中执行以下操作 但它没有显示任何内容 S 我的模型文件 function forumList this gt db gt select oversk
  • PHP - 发送带有附件的电子邮件不显示消息内容

    尝试创建一个脚本 我可以在其中发送带有附件的电子邮件 一切正常 除了当我不在电子邮件中添加文件时 我仍然可以看到带有 0B 且没有名称的附件 if isset POST my send email to POST my email to r
  • 如何使用 CSS 将 div 置于表格中心?

    我正在尝试向我的网站之一添加幻灯片 整个页面布局在一个 HTML 表格中 我非常讨厌它并且没有选择 我想将我的幻灯片放在该特定列的中心 我的 CSS 如下所示 slideshow position relative slideshow IM
  • 转换 SVG 过滤器

    我正在尝试创建一个像 SVG 圆圈上的阴影这样的材质设计 我希望当您单击圆圈时 这个阴影能够以良好的过渡来增长 但目前我正在努力弄清楚是否可以为这种过渡设置动画 所以我希望有人能够提供帮助 我添加了一个到目前为止所得到的小例子 一个带有阴影
  • 如何将 HTML 表格转换为 csv 格式?

    是否有 HTML 解析器或某些库可以自动将 HTML 表格转换为 CSV 数据行 Here is http www unix com shell programming scripting 45274 html table csv html
  • 从 php 对 Active Directory/ISA 进行身份验证 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个复杂的问题 而且由于我真的不知道从哪里开始而加剧 在过去的几年里 我开发了许多基于 php Web 的系统 当我构建它们时 我
  • PHP Netbeans:xdebug 在每个 include() 或 require() 上停止

    我刚刚发现使用 netbeans IDE 中集成的 xdebug 进行 PHP 调试 我认为这很棒 没有它我怎么生活 但有一个问题 如果我在代码深处设置了一个断点 我必须在到达断点之前多次按 继续 F5 因为脚本会在每个 include 和
  • 如何使用 PHP 从 MySQL 查询中按升序对值进行排序?

    我使用以下 PHP 脚本从 MySQL 表中获取和更改数据 并将结果打印在 HTML 表中 我希望按升序对数据进行排序 utilization percentage变量 它是由创建的 total client time total avai
  • 页面不会居中对齐

    我遇到了 CSS 问题 http www luukratief design nl dump parallax index html http www luukratief design nl dump parallax index htm
  • 如何获取本地主机系统的公共IP地址[重复]

    这个问题在这里已经有答案了 我已连接到局域网 我可以访问互联网 使用浏览器 我可以使用搜索 我的 IP 是什么 找到我的公共 IP 我想使用php获取公共IP 我正在我的中运行脚本localhostwamp服务器 I tried SERVE
  • 在浏览器上录制视频并上传到LAMP服务器

    我已经尝试了很多东西 red5 jquery 网络摄像头 html5 但这些解决方案都没有录制视频并准备好上传到服务器 无论如何 html5 flash 等等 更好的跨浏览器解决方案 最好的 上传视频 音频 并将结果上传到服务器 我猜是通过
  • 从数据库生成 XML 时出现 PHP 编码错误 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试获取一个简单的 PHP 服
  • 从命令行运行 PHP 脚本

    如何使用用于解析 Web 脚本的 PHP 解释器从命令行运行 PHP 脚本 我有一个phpinfo php从网络访问的文件显示German已安装 但是 如果我运行phpinfo php从命令行使用 php phpinfo php and g
  • 在 Oracle 中使用触发器记录对表的更改

    我的一门课有一个项目 当我们的两个表发生更改时 我们需要创建一个日志 插入 更新 删除 我们需要使用Oracle触发器和PL SQL 在日志文件中 我们需要记录用户ID 日期时间 IP地址和事件 插入 更新 删除 我知道如何设置触发器 但我

随机推荐

  • 熊猫留在原地

    我有一个大数据框df和一个小数据框df right有 2 列a and b 我想做一个简单的左连接 查找a无需复制df 我想出了这段代码 但我不确定它有多强大 dtmp pd merge df a df right on a how lef
  • SKSpriteNode 框架偏离

    我正在尝试从 UIBezierPath 创建一个开放圆 并将其转换为 SKShapeNode 稍后将其转换为 SKSpriteNode 我遇到了一个问题 我不知道如何缩小精灵 而它的线宽没有缩小 您可以在这里查看解决方案 调整精灵大小而不缩
  • C#,Gmap.net:使用 Gmap.net 库在谷歌地图上绘制 5 个标记时生成异常

    我正在使用 Gmap net 库在谷歌地图上的三角测量算法进行计算后在特定的时间绘制标记 当我为两个标记工作时 它工作正常 但当我尝试绘制 5 个标记时 它向我显示异常 System InvalidOperationException 类型
  • Python使用key和lambda进行排序,lambda有什么作用?

    所以我有一个值列表 如下所示 values date 2015 04 15T11 15 34 val 30 val 90 date 2015 04 19T11 15 34 val 25 date 2015 04 16T11 15 34 我用
  • Pandas 循环访问数据帧列表和更改索引

    这是一个基本问题 但我想循环遍历数据帧列表 并对于每个数据帧 将索引设置为数据帧中的列之一 下面代码的问题是它没有使用新索引保存数据框 如何格式化此 For 循环 以便数据帧在 for 循环之外永久更改 谢谢 dflist df 1 df
  • Xamarin Studio 中的 java Lang UnsupportedClassVersion 错误

    当我构建项目时 出现以下错误 我该如何纠正这个问题 C Program Files x86 MSBuild Xamarin Android Xamarin Android Common targets 3 3 错误 java lang Un
  • Windows Phone 8 中的地图点击事件/鼠标按下事件?

    我正在使用 Windows Phone 模拟器 我写了一个非常简单的程序 当用户点击地图一次时在地图上绘制一个标记 然后我使用map tap事件 并获取点击的位置 如下所示 private void map Tap object sende
  • 4.1 中的 java.lang.NoClassDefFoundError 和使用 5.1.在 android studio 中使用 multidex

    三天以来我陷入了一个非常愚蠢的问题 但仍然没有运气 我使用 Parse com 进行注册和登录 我还使用 Twitter 和 Facebook 我的应用程序类 oncreate 方法 public void onCreate super o
  • MongoDB - 聚合和

    我正在尝试计算我们数据库中跟踪的总花费金额 每个订单文档包含一个字段 total price 我正在尝试使用以下代码 db orders aggregate group id null total sum total price 不幸的是
  • 角度变量生成html

    我正在尝试使用 angularJS 制作一个博客页面 在消息部分我有一个像这样的 div div class post content jsonPost message div 在变量 jsonPost message 中我得到了一个像这样
  • Mac OS X 10.9之后无法安装PIL

    我刚刚将我的 Mac 操作系统更新到 10 9 我发现我的一些 全部 Python 模块不再存在 尤其是 Image 模块 所以我尝试执行sudo pip install pil 但我收到此错误 Applications Xcode app
  • 如何使自定义控件的属性打开文件对话框?

    我有一个自定义控件 其属性保存目标计算机上存在的文件位置的名称 完整路径 确切的路径会根据目标电脑的类型而有所不同 并且通常在我将自定义控件添加到表单后立即设置 同时我仍处于项目的设计模式 以便当我的应用程序运行时 它会从以下位置获取文件名
  • 如何在 GTK 3.8 中强制刷新屏幕?

    找到了解决方案 见下文 我使用GTK 3 8gtk grid在滚动窗口中 C 代码处理大量数据并在网格中显示一些数据 GTK 在程序处理完所有数据之前不会绘制网格 添加数据时如何强制 GTK 3 刷新屏幕 I tried gtk widge
  • UIImageWriteToSavedPhotosAlbum 仅保存 10 张图像中的 5 张。为什么?

    正如标题所示 我遇到了问题 是否有任何限制 例如 每秒仅导出 3 个图像 或类似的限制 for int frameStepper 0 frameStepper lt Something frameCount frameStepper Get
  • Java - Reader 流内的动态字符串替换

    我在磁盘上有一个 文本 文件 我需要将其读入带有 Reader 对象的库中 在阅读此文件时 我想对数据执行正则表达式字符串替换 我当前的解决方案是将整个文件作为一个字符串读入内存 进行字符串替换 然后为此字符串创建一个 StringRead
  • 将预加密的配置文件部署到生产环境

    我们想要加密部署到服务器的所有 Web 应用程序配置文件 我们更愿意将其作为构建过程中的一个步骤 并将预加密的文件包含在 MSI 中 这意味着我们的构建服务器 加密器 和生产服务器 解密器 需要相同的密钥 所以我现在正在尝试做一个非常基本的
  • 实现多个通用接口

    我需要处理两种不同类型的事件 但遇到以下问题 EventListener 接口不能使用不同的参数多次实现 EventListener
  • UnicodeEncodeError:“mbcs”编解码器无法对位置 0--1 中的字符进行编码:运行 PyInstaller 编译的脚本时字符无效

    我刚刚完成了一个我一直在开发的程序 并且一直想将其编译为单个 exe 文件以供分发 我决定使用 pyinstaller 3 因为它之前对我有用 但是在成功编译我的文件后 我在运行程序时收到以下消息 C Users Luke Document
  • 如何在 Windows Phone 8.1 中以编程方式创建磁贴?

    在 Windows Phone 8 中 我能够使用以下内容创建 Shell Tile StandardTileData newTileData new StandardTileData BackgroundImage new Uri Ima
  • 使用 preg_replace() 将图像占位符转换为 HTML 标记

    我想用有效的 HTML 标记替换方括号图像占位符 示例占位符可能如下所示 img http example com data 025 img jpg 我想要的是改变它所说的部分 img with img 标记并得到如下结果 img src