php - 用 PHP 编写一个简单的 preg_replace

标签 php regex

我不太擅长编码,但我需要用 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 正则表达式的情况。

<?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
}

这是此类攻击的实际示例

<?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
}

关于php - 用 PHP 编写一个简单的 preg_replace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/192228/

相关文章:

php - jQuery Time ago 来自时间戳?

php - 从 WordPress 主题覆盖 wedevs-dokan-plugin 模板文件

C++ 正则表达式在第一个空格后拆分

regex - 在 htaccess RewriteRule 中排除特定子域或无子域

Javascript - 正则表达式 - 获取介于/*color_1*/和/*color_1_end*/之间的字符串

java - base64 编码字符串的 Junit 测试

php - 错误 appcfg.py :2488 An unexpected error occurred. 正在中止

php - 如何在 phpmyadmin 和 MySQL 中创建插入和更新列?

javascript - 删除jquery创建的内容

c# - 使用负向后查找来匹配字符串中的单词