2011-08-15 8 views
0

次のPerlコードは、URLを開かない:システムコールでPerlが%by 23を置き換えるのはなぜですか?予想通り

http://www.google.com/%23source=hp&q=中文 

代わりの

http://www.google.com/#source=hp&q=中文 

私はシステムを交換する場合:

$word="中文"; 
my $url="http://www.google.com/#source=hp&q=" . $word; 
print $url . "\n"; 
system("open \"$url\""); 

をそれはGoogleがURLを使ってChrome開きます電話:

system("echo \"$url\""); 

Google ChromeのURLフィールドに貼り付けたときに動作する正しいURL http://www.google.com/#source=hp&q=中文を印刷します。

これはなぜですか?それを修正するには?

[編集8月14日、20:30CDT]

問題がopenであるようです。なし

open "http://www.google.com/#source=hp&q=中文" 
open 'http://www.google.com/#source=hp&q=中文' 
open http://www.google.com/#source=hp&q=中文 

作品です。彼らはすべて#%23に置き換えました。私は、クエリに代わり "中文" の、すなわち使用を "中" 1つの文字を入れた場合興味深いことに、私は私は、Mac OS Xを使用してい

open "http://www.google.com/#source=hp&q=中" 
open 'http://www.google.com/#source=hp&q=中' 

仕事ではなく

open http://www.google.com/#source=hp&q=中 

の両方を発見しました10.6。

+0

システムコールで二重引用符の代わりに一重引用符を使用しようとしましたか?同様に: 'system(" open '$ url' ");' – thelsdj

+0

'が機能しませんでした。 –

+0

シェルから直接 'open'コマンドを実行しようとしましたか?問題はperではなく、openやchromeがコマンドラインからのURLをどのように処理するかで問題になる可能性があります。 – thelsdj

答えて

1

元の質問への直接的な答えはありません。

質問を編集する際にOPが言ったように、それは間違いなくopenコマンドであり、Perlではなく、system()というコマンドであるので、これはこれを行うことです(私はそれを信用できません。二重引用符ではなく単一引用符を使用しても違いはありません)。

openはMacOSに固有のようです(私のUbuntuシステムにはopenコマンドがありますが、それは同じではありません)。 Here's the man page

説明のは、%23'#"文字の16進表現であることです。 URLは通常、このメカニズムを使用して、そうでない場合はURL内でいくつかの意味を持つ文字をエスケープします。たとえば、google.comの検索ボックスに"foo#bar"と入力すると、このURL:http://www.google.com/search?q=%22foo%23bar%22が生成されます。それはメタ文字として扱われるべきであるとき

疑問は、なぜopen%23によって'#'を交換されていますか?それはopenのバグかもしれません、または回避する方法があるかもしれません。おそらく、MacOSにもっと親しんでいる人がそれを手伝ってくれるでしょう。

ただ、野生の推測:あなたは、コマンドラインで

open 'http://www.google.com/\#source=hp&q=中文' 

を入力するとどうなりますか?

+0

あなたの提案では、「http://www.google.com/%5C%23source=hp&q=中文」が開きますが、間違っています。 –

関連する問題