CGI.escapeHTML是非常糟糕的,但CGI.unescapeHTML完全被塞了.例如:
require 'cgi'
CGI.unescapeHTML('…')
# => "…" # correct - an ellipsis
CGI.unescapeHTML('…')
# => "…" # should be "…"
CGI.unescapeHTML('¢')
# => "\242" # correct - a cent
CGI.unescapeHTML('¢')
# => "¢" # should be "\242"
CGI.escapeHTML("…")
# => "…" # should be "…"
Run Code Online (Sandbox Code Playgroud)
看来,unescapeHTML知道所有的数字代码加&,<,>,和".并且escapeHTML只知道最后四个 - 它没有做任何数字代码.我知道转义通常不需要那么强大,因为HTML将允许大多数字符的文字版本,除了CGI.escapeHTML知道的四个字符.但是,失业应该会更好.
有没有更好的工具,至少对于unescaping?
例如,查看计算第n个Fibonacci数的代码:
fib(int n)
{
if(n==0 || n==1)
return 1;
return fib(n-1) + fib(n-2);
}
Run Code Online (Sandbox Code Playgroud)
此代码的问题是它将为任何大于15的数字(在大多数计算机中)生成堆栈溢出错误.
假设我们正在计算fib(10).在这个过程中,说fib(5)计算很多次.有没有办法将其存储在内存中以便快速检索,从而提高递归的速度?
我正在寻找一种可用于几乎所有问题的通用技术.
我有一些代码将return_toURL 嵌入到我想要测试的重定向(如OpenID)中:
def test_uses_referrer_for_return_to
expected_return_to = 'http://test.com/foo'
@request.env['HTTP_REFERER'] = expected_return_to
get :fazbot
# @response.redirected_to looks like http://service.com?...&return_to=[URI-encoded version of URL above]&...
encoded_return_to = (something_here)[:return_to]
assert_equal expected_return_to, URI.unencode(encoded_return_to)
end
Run Code Online (Sandbox Code Playgroud)
这是一个Rails ActionController::TestCase,所以我可以访问各种帮助方法; 我找不到合适的人.
当然我可以URI.parse用来获取URL的params部分,然后将其/&|?/拆分然后重新拆分'=',但我希望这已经为我完成了.另外,如果我错过了网址转义或参数解析中的一些模糊规则,该怎么办?有有有什么东西在ActionPack或ActiveSupport要做到这一点,但我不能找到它.
谢谢 :)
如何在CouchDB中的视图之间共享代码?
Jesse Hallett 有一些很好的实用方法,包括
function dot(attr) {
return function(obj) {
return obj[attr];
}
}
Array.prototype.map = function(func) {
var i, r = [],
for (i = 0; i < this.length; i += 1) {
r[i] = func(this[i]);
}
return r;
};
...
Run Code Online (Sandbox Code Playgroud)
我在哪里可以放置此代码,以便每个视图都可以访问它?
类似于我在我的应用程序中使用的常量.我在哪里放
MyApp = {
A_CONSTANT = "...";
ANOTHER_CONSTANT = "...";
};
Run Code Online (Sandbox Code Playgroud)
如果我想要一个过滤"是这个有钱人吗?"的视图怎么办?
function(doc) {
if (doc.type == 'person' && doc.net_worth > 1000000) {
emit(doc.id, doc);
}
} …Run Code Online (Sandbox Code Playgroud) 我想MyMiddleware在我的Rack应用程序中运行,但仅适用于某些路径.我希望使用Rack::Builder或至少Rack::URLMap,但我不知道如何.
这是我认为可行的,但不是:
# in my rackup file or Rails environment.rb:
map '/foo' do
use MyMiddleware, { :some => 'options' }
end
Run Code Online (Sandbox Code Playgroud)
或者,更好的是,使用Regexp:
map /^foo/ do
use MyMiddleware, { :some => 'options' }
end
Run Code Online (Sandbox Code Playgroud)
但map似乎最终需要一个应用程序; 它不会仅仅将控制权传回给它的父母.(undefined method 'each' for nil:NilClass当Rack尝试将该do...end块的结尾转换为时,实际错误为" " app.)
是否有一个中间件需要一系列中间件和一个路径,并且只在路径匹配时运行它们?
我在我的定义中有以下RSpec(1.3.0)任务Rakefile:
require 'spec/rake/spectask'
Spec::Rake::SpecTask.new(:spec) do |spec|
spec.libs << 'lib' << 'spec'
spec.spec_files = FileList['spec/**/*_spec.rb']
end
Run Code Online (Sandbox Code Playgroud)
我有以下内容spec/spec_helper.rb:
require 'rubygems'
require 'spec'
require 'spec/autorun'
require 'rack/test'
require 'webmock/rspec'
include Rack::Test::Methods
include WebMock
require 'omniauth/core'
Run Code Online (Sandbox Code Playgroud)
我有一个声明的规格spec/foo/foo_spec.rb:
require File.dirname(__FILE__) + '/../spec_helper'
describe Foo do
describe '#bar' do
it 'be bar-like' do
Foo.new.bar.should == 'bar'
end
end
end
Run Code Online (Sandbox Code Playgroud)
当我运行时rake spec,单个示例运行两次.我可以通过让示例失败来检查它,给我两个红色的"F".
我想到的一件事是添加spec到SpecTask's' libs会导致它们被双重定义,但删除它似乎没有任何影响.
我在Javascript两个字符串:"_strange_chars_µö¬é@zendesk.com.eml"(f1)和"_strange_chars_µö¬é@zendesk.com.eml"(f2).乍一看,它们看起来完全相同(事实上,在StackOverflow上,它们可能是;我不确定将它们粘贴到这样的形式时会发生什么.)然而,在我的应用程序中,
f1[16] // ö
f2[16] // o
f1[17] // ¬
f2[17] // ?
Run Code Online (Sandbox Code Playgroud)
也就是说,在f1使用ö字符,f2使用一个ö和音调符号¨作为一个单独的字符.我能做什么比较才能证明这两个字符串"相等"?
javascript string unicode normalization unicode-normalization
DKIM支持两种规范化方案:轻松和简单.前者更宽松,允许中间邮件程序在有限的程度上修改电子邮件.
我能找到的唯一数据是对实现的调查,显示绝大多数电子邮件发件人使用标题和正文的轻松规范化.(明显少用于身体的放松,但它仍然是绝对多数.)
DKIM规范说,如果支持DKIM,所有客户都必须支持规范化形式,因此这似乎不是一个主要因素.两种方案都允许中间人添加标题.唯一的区别是,我可以告诉在头名(不是值)和空白的情况下的处理中的标头.鉴于此,似乎放松总是至少具有良好的可传递性,这是DKIM的目标.
(当然,如果我想实际签署我的电子邮件以证明他们的内容,我会使用S/MIME和证书.DKIM严格关于可传递性,对吗?)
我有一个Javascript"类"定义如下:
var Welcomer = function(name) {
var pName = name;
var pMessage = function() {
return "Hi, " + pName + "!";
};
return {
sayHi: function() {
alert(pMessage());
}
};
};
new Welcomer('Sue').sayHi();
Run Code Online (Sandbox Code Playgroud)
有没有办法以Welcomer这样的方式"子类化" 我可以重新定义公共方法并可以访问私有方法和变量?以下内容将允许我访问公共方法,但不允许访问私有方法:
var UnhappyWelcomer = function(name) {
var pSadMessage = function() {
// won't work, b/c I don't have access to pMessage
return pMessage() + " Miserable day, innit?";
};
return {
sayHi: function() {
alert(pSadMessage());
}
};
};
UnhappyWelcomer.prototype = Welcomer(); // failed …Run Code Online (Sandbox Code Playgroud) ruby ×4
javascript ×3
parsing ×2
closures ×1
couchdb ×1
dkim ×1
dry ×1
email ×1
escaping ×1
html ×1
inheritance ×1
middleware ×1
monads ×1
performance ×1
rack ×1
recursion ×1
rspec ×1
scoping ×1
string ×1
testing ×1
unicode ×1
unit-testing ×1
url ×1