问题描述
|
这里有一些解释。这是用于将任意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程序