【问题标题】:Perl regex to php functionPerl 正则表达式到 php 函数
【发布时间】:2020-03-09 12:20:20
【问题描述】:

我缺乏对 RegEx 的基本了解,但是我的任务是使用 preg_replace 将这个 perl sn-p 转换为 php,我无法弄清楚如何让它正常运行,因为我无法弄清楚如何正确地转义正则表达式字符串进入 php 中的 var。

sub rssEnc {
    my $DATA=shift;
    my %tr=(
    "'" => '"',
    "" => '"',
    '"' => '"',
    '&' => '&',
    '$' => '$',
    '<' => '&lt;',
    '>' => '&gt;',
    '' => '&#39;'
    );
    $DATA=~s/(&(?!(#\w*|quo|apo|amp|lt|gt);)|["'\<\>\$])/$tr{$1}/g;
    $DATA=~s/[^\x{21}-\x{7E}\s\t\n\r]//g;
return $DATA;
}

【问题讨论】:

  • 好吧,只需将 %tr 更改为 PHP 数组并运行 strtr() 或为此只需 php.net/manual/en/function.htmlentities.php
  • 我曾尝试在此运行 htmlentities,但我的输出显示为空白,这很奇怪。输入来自 pdo 调用的 db 字段。但是如果我从一个字符串中给它提供数据,它会做它应该做的事情。

标签: php regex perl


【解决方案1】:

你可以使用 preg_replace_callback (https://www.php.net/manual/function.preg-replace-callback.php) 之类的东西

它可能看起来像这样:

<?
function rssEnc($data) {
    $tr = array(
        "'" => '&#34;',
        "" => '&#34;',
        '"' => '&quot;',
        '&' => '&amp;',
        '$' => '&#36;',
        '<' => '&lt;',
        '>' => '&gt;',
        '' => '&#39;'
    );

    $data = preg_replace_callback('/(&(?!(#\w*|quo|apo|amp|lt|gt);)|["\'\<\>\$])/m', 
        function($match) use($tr) {return $tr[$match[1]];}, 
        $data);
    $data = preg_replace('/[^\x21-\x7e\s\t\n\r]/', '', $data);
    return $data;
};
?>

【讨论】:

  • 非常感谢。这正是我需要它做的 =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多