8

ウィキペディア(または一般的にMediaWiki)はどのようにページタイトルをURIにエンコードしますか?スペースがアンダースコアに置き換えられ、二重引用符がエンコードされないため、通常のURIエンコードではありません。

4

2 に答える 2

7

プロセスは非常に複雑で、正確にはきれいではありません。Titleにあるクラスを確認する必要がありますincludes/Title.php。メソッドから始める必要newFromTextがありますが、ロジックの大部分はsecureAndSplitメソッド内にあります。

(MediaWikiの場合と同様に)コードは少しも切り離されていないことに注意してください。複製する場合は、単にクラスを再利用するのではなく、ロジックを抽出する必要があります。

ロジックは次のようになります。

  • 文字参照をデコードします(例:é)
  • スペースをアンダースコアに変換する
  • タイトルが名前空間またはインターウィキへの参照であるかどうかを確認します
  • ハッシュフラグメントを削除します(例:Apple#Name
  • 禁止文字を削除する
  • サブディレクトリリンクを禁止する(例../directory/page
  • トリプルチルダシーケンスを禁止する(~~~)(何らかの理由で)
  • サイズを255バイトに制限します
  • 最初の文字を大文字にする

さらに、引用符は元のユーザーがエンコードする必要はなく、ブラウザーはそれらを透過的に処理できると言っているのは正しいと思います。

お役に立てば幸いです。

于 2010-10-07T17:54:09.117 に答える
7

http://en.wikipedia.org/wiki/Wikipedia:Naming_conventions_%28technical_restrictions%29-ここでは、エンジンが記事名に適用する内容について、ある種の説明があります。

LocalSettings.phpに次のようなものが含まれている必要があります。$wgArticlePath='/ wiki / $ 1';

適切なサーバーURIは構成を書き換えます-Apache(HTTPヘッダー)を使用しているように見えるので、おそらくmod_rewriteです。http://www.mediawiki.org/wiki/Manual:Short_URL

次のようなウィキペディアの記事については、index.phpファイルを参照することもできます。http://en.wikipedia.org/w/index.php?title=Foo%20barエンジンによってにリダイレクトされhttp://en.wikipedia.org/wiki/Foo_barます。舞台裏では、mod_rewriteはそれを/index.php?title=Foo_barに変換します。MediaWikiエンジンの場合、アクセスした場合と同じ http://en.wikipedia.org/w/index.php?title=Foo_barです。このページはリダイレクトしません。

于 2010-10-08T02:25:14.830 に答える