2011-05-26 74 views
0

一些解释here。这是为了将任意的javascript代码转换成适用于bookmarklets的代码。这个Perl脚本的PHP等价物是什么?

#!/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`; 
+1

你对此不了解么?你的进度停在哪里? – Lepidosteus 2011-05-26 12:35:07

+2

你是要求有人为你重写这个吗?也许这是一个更合适的地方:http://www.elance.com/ – 2011-05-26 12:36:34

+0

'for'部分。我知道它正在应用一些正则表达式,但无法弄清它是如何取代事物的。 – 2011-05-26 12:37:54

回答

4

我没有将它翻译成PHP给你,但我会给出伪代码。

  • 文件读入到$ SRC字符串
  • 删除第一行,如果正则表达式
  • 复制串匹配书签意见式样到另一个是$ var
  • 替代任何问题模式。 PHP的preg_replace()将是适当的
  • 确保$ var为UTF编码,并适当引用,特别注重十六进制字符
  • 前面加上$变种与 'JavaScript的:'
  • 回声 “//是$ var \ n $ SRC”
  • 系统调用哪个管道$ var到pbcopy程序
+0

谢谢!这很容易转换为代码(如果我可以正确得到正则表达式部分)。 – 2011-05-26 12:40:47

相关问题