【问题标题】:Regular expression to replace markup with iframe用 iframe 替换标记的正则表达式
【发布时间】:2013-05-29 15:48:55
【问题描述】:

我正在构建一个简单的函数来在 Wordpress 中嵌入视频。我想阅读帖子内容并将[youku: xxAAAJFSK]替换为iframe:<iframe src="http://player.youku.com/embed/xxAAAJFSK"></iframe>

我猜我应该使用正则表达式进行替换,但似乎找不到正确的...我试过了:

$pattern = '/youku\.com\/([^\/]*)/i';
if (preg_match($pattern, $content, $matches)){
  $id_video = $matches[1];
  return "<iframe src='http://player.youku.com/embed/" . $id_video . "></iframe>";
}

这只是破坏了我的网站..

如果您设法让我使用 [youku: xxAAAJFSK width:400 height:400] 之类的东西设置宽度和高度,则可以加分

【问题讨论】:

  • 如果您包含 $pattern 中的内容会很有用。
  • 确实.. 编辑了我的问题。

标签: php regex wordpress


【解决方案1】:

你固定在那个语法上吗?如果没有,您最好查看Wordpress Shortcode API 并遵循他们的风格。由于系统将处理参数解析,因此这将为您带来很多艰苦的工作。例如:

// [youku vid="xxAAAJFSK" width="400" height="400"]
function youku_func( $atts ) {    
    return "<iframe src='http://player.youku.com/embed/" . $atts['vid'] . " width='" . $atts['width'] . "' height='" $atts['height'] . "'></iframe>";
}
add_shortcode( 'youku', 'youku_func' );

您可能希望扩展它以包含宽度和高度的默认值,或者如果它们没有作为参数给出,则将它们删除。

【讨论】:

  • 正是我想要的。如果将来需要,我现在已准备好处理更多代码!
【解决方案2】:

这其实是很easy做的……

  • \[:匹配[
  • \s* : 匹配一个空格 0 次或更多次
  • youku:匹配优酷
  • \s* : 匹配一个空格 0 次或更多次
  • : : 匹配 :
  • \s* : 匹配一个空格 0 次或更多次
  • ([^]]*) :匹配除] 0 次或多次以外的任何内容并将其分组
  • \] :匹配 ]
  • 您甚至可以使用i 修饰符进行不区分大小写的匹配。

正则表达式: \[\s*youku\s*:\s*([^]]*)\]
替换: &lt;iframe src="http://player.youku.com/embed/$1"&gt;&lt;/iframe&gt;
PHP 代码: $output = preg_replace('#\[\s*youku\s*:\s*([^]]*)\]#i', '&lt;iframe src="http://player.youku.com/embed/$1"&gt;&lt;/iframe&gt;', $input);

【讨论】:

  • 像魅力一样工作!非常感谢正则表达式的解释,它对我有很大帮助。最后,我仍然会使用 n00dle 的解决方案,因为它似乎是 Wordpress 中更标准的方法。
【解决方案3】:

除非您出于教育目的这样做,否则don't reinvent the wheel

已经有很多支持优酷的 Wordpress 插件了。

编辑:如果您想自己开发,我建议您查看现有的工作插件之一,并根据您的需要调整其实现。

【讨论】:

  • 在自己尝试之前,我已经尝试了一堆插件,但它们根本不起作用......我也查看了代码,但无法提取其中的一小部分我很感兴趣。最后,我宁愿自己做简单的事情,没有插件,因为我觉得我对它有更多的控制权,特别是当我无法理解插件的代码时。无论如何,你的想法也是有效的,谢谢分享:)
猜你喜欢
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 2011-06-28
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多