6

所以这是我的情况,以及我想出的解决问题的解决方案。我创建了一个包含 TinyMCE 的应用程序,以允许用户创建用于发布的 HTML 内容。用户可以在他们的标记中包含图像,并拖动/调整影响 IMG 标签中最终宽度/高度属性的图像的大小。这一切都很好,用户可以包含图像并将它们调整大小/重新定位到他们想要的外观。但一个大问题是我现在向客户端发送(可能)更大的图像,只是让浏览器将图像调整为请求的宽度/高度属性。所有带宽和丢失的加载时间....

所以我的解决方案是预处理我的用户标记内容,扫描所有的 IMG 标签并解析出 Height/Width/Src 属性。然后将每个 img 的 SRC 标记设置为 phpThumb 请求,并将解析的高度/宽度传递到缩略图 URL。这将创建我缩小尺寸的图像(以 CPU 和缓存为代价优化带宽)。您如何看待这个解决方案?我看过其他帖子,人们使用 mod_rewrite 来做类似的事情,但我想影响页面服务上的内容,而不是在接收到图像请求时对其进行操作。....对这个设计有什么想法吗?

我需要一些关于细节的帮助,因为我的正则表达式技能需要一些工作,但我的时间很短,并承诺很快偿还我的技术知识债务。为了使正则表达式更容易,我可以确定一些事情。只有需要此处理的 img 标签才会具有现有的 width="" height="" 属性(使用双引号和小写文本,但我认为如果 TinyMCE 更改,匹配不区分大小写的文本会更好)

所以一个正则表达式只匹配必要的 Img 标签,也许还有另外三个正则表达式来提取 src、宽度和高度?

谢谢大家。

4

3 回答 3

3

我认为为此使用正则表达式是一个坏主意,你最好使用PHP Simple HTML DOM Parser之类的东西来解析它,然后你可以执行以下操作:

// Load HTML from a string
$html->load($your_posted_content);

// Find all images 
foreach($html->find('img') as $element) 
       echo $element->src . '<br>';
于 2010-04-28T17:06:05.027 回答
1

试试这个:

(?i)<img(?>\s+(?>src="([^"]*)"|width="([^"]*)"|height="([^"]*)"|\w+="[^"]*"))+

这将匹配任何图像标签,如果存在srcwidthheight属性,它们的值将分别存储在组 1、2 和 3 中。但它不需要任何这些属性,因此您需要在处理之前验证所有三个组都包含值。

于 2010-04-28T18:06:39.077 回答
0

一般来说,RegEx 不适合 HTML 解析width="..".. 但在您的情况下,如果您将范围限制得非常窄(即仅搜索和height=".."属性.. 或类似的东西),您可能能够摆脱它。

更好的解决方案可能是从 TinyMCE 异步传输内容,在场景中,并使用适当的 HTML/XML 解析器在服务器端处理它,然后在完成后更新编辑器的内容。

于 2010-04-28T17:07:48.750 回答