这个Perl脚本的PHP等价于什么?

问题描述

| 这里有一些解释。这是用于将任意javascript代码转换为适用于小书签的代码
#!/usr/bin/env perl
#
# http://daringfireball.net/2007/03/javascript_bookmarklet_builder
# Licence: http://www.opensource.org/licenses/mit-license.PHP

use strict;
use warnings;
use URI::Escape qw(uri_escape_utf8);
use open  IO  => \":utf8\",# UTF8 by default
          \":std\";               # Apply to STDIN/STDOUT/STDERR

my $src = do { local $/; <> };

# Zap the first line if there\'s already a bookmarklet comment:
$src =~ s{^// ?javascript:.+\\n}{};
my $bookmarklet = $src;

for ($bookmarklet) {
    s{^\\s*//.+\\n}{}gm;  # Kill comments.
    s{\\t}{ }gm;         # Tabs to spaces
    s{[ ]{2,}}{ }gm;    # Space runs to one space
    s{^\\s+}{}gm;        # Kill line-leading whitespace
    s{\\s+$}{}gm;        # Kill line-ending whitespace
    s{\\n}{}gm;          # Kill newlines
}

# Escape single- and double-quotes,spaces,control chars,unicode:
$bookmarklet = \"javascript:\" .
    uri_escape_utf8($bookmarklet,qq(\'\" \\x00-\\x1f\\x7f-\\xff));

print \"// $bookmarklet\\n\" . $src;

# Put bookmarklet on clipboard:
`/bin/echo -n \'$bookmarklet\' | /usr/bin/pbcopy`;
    

解决方法

我不会为您翻译成PHP,但是会提供伪代码。 将文件读入$ src字符串 如果正则表达式与bookmarklet注释模式匹配,则删除第一行 将字符串复制到另一个$ var 替代任何问题模式。 PHP
preg_replace()
比较合适 确保$ var是utf编码并正确引用,尤其要注意十六进制字符 在$ var前面加上\'javascript:\' echo \“ // $ var \\ n $ src \” 系统调用,它将$ var通过管道传递给pbcopy程序