我不是一个程序员,但我需要在PHP中编写一个简单的preg_replace语句来帮助我使用WordPress插件.基本上,我需要一些代码来搜索字符串,拉出视频ID,并返回插入视频ID的嵌入代码.
换句话说,我正在寻找这个:
[youtube=http://www.youtube.com/watch?v=VIDEO_ID_HERE&hl=en&fs=1]
并希望用它替换它(保持视频ID相同):
param name="movie" value="http://www.youtube.com/v/VIDEO_ID_HERE&hl=en&fs=1&rel=0
如果可能的话,如果你能解释一下你如何在搜索模式中使用各种斜线,插入符号和Kleene星,即将它从grep翻译成英语,我将永远感激,这样我就可以学习.:-)
谢谢!
麦克风
小心!如果这是一个具有用户输入的BBCode风格的系统,那么这两个其他解决方案将使您容易受到XSS攻击.
你有几种方法来保护自己免受这种伤害.让正则表达式明确禁止可能让你遇到麻烦的字符(或者只允许那些对youtube视频id有效的字符),或者实际清理输入并使用preg_match代替,我将在下面介绍RoBorg的正则表达式.
以下是此类攻击的实例
&hl=en&fs=1]"; // Is vulnerable to XSS echo preg_replace('/\[youtube=.*?v=(.*?)&.*?\]/i', 'param name="movie" value="http://www.youtube.com/v/$1&hl=en&fs=1&rel=0', $input ); echo "\n"; // Prevents XSS if ( preg_match('/\[youtube=.*?v=(.*?)&.*?\]/i', $input, $matches ) ) { $sanitizedVideoId = urlencode( strip_tags( $matches[1] ) ); echo 'param name="movie" value="http://www.youtube.com/v/' . $sanitizedVideoId . '&hl=en&fs=1&rel=0'; } else { // Not valid input }