当前位置:  开发笔记 > 编程语言 > 正文

在PHP中编写一个简单的preg_replace

如何解决《在PHP中编写一个简单的preg_replace》经验,为你挑选了1个好方法。

我不是一个程序员,但我需要在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翻译成英语,我将永远感激,这样我就可以学习.:-)

谢谢!
麦克风



1> Peter Bailey..:

小心!如果这是一个具有用户输入的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
}

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有