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