【问题标题】:What is the PHP equivalent of this Perl script?这个 Perl 脚本的 PHP 等价物是什么?
【发布时间】:2011-09-02 13:33:11
【问题描述】:

一些解释here。这是为了将任意 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`;

【问题讨论】:

  • 你有什么不明白的?您的进度在哪里停止?
  • 您是否要求有人真正为您重新编写此内容?也许这里是更合适的地方:elance.com
  • for 部分。我知道它正在应用一些正则表达式,但无法弄清楚它是如何替换的。
  • @Richard — +1。对于 SO 捆绑在一起的单独问题太多了。 (那是在我的 Perl 倡导者的权力开始对请求感到畏缩之前)

标签: php perl code-generation bookmarklet


【解决方案1】:

我不会为你把它翻译成 PHP,但我会给出伪代码。

  • 将文件读入$src字符串
  • 如果正则表达式与书签注释模式匹配,则删除第一行
  • 将字符串复制到另一个 $var 中
  • 替换任何问题模式。 PHPs preg_replace() 是合适的
  • 确保 $var 是 utf 编码并正确引用,特别注意十六进制字符
  • 在 $var 前面加上 'javascript:'
  • echo "// $var\n$src"
  • 通过管道将 $var 传递给 pbcopy 程序的系统调用

【讨论】:

  • 谢谢!这很容易转换为代码(如果我能正确使用正则表达式部分)。
猜你喜欢
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 2023-03-25
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
相关资源
最近更新 更多