[解決済み】Stack OverflowはどのようにしてSEOに適したURLを生成しているのですか?
2022-04-17 08:20:17
質問
良い完成度とは 正規表現 とか、タイトルを取るような処理をします。
Stack OverflowのようにタイトルをURLの一部に変更するにはどうすればよいのでしょうか?
にして、それを
how-do-you-change-a-title-to-be-part-of-the-url-like-stack-overflow
は、Stack Overflow の SEO フレンドリーな URL で使用されているものですか?
私が使用している開発環境は Ruby on Rails しかし、もし他のプラットフォーム固有のソリューション(.NET、PHP。 ジャンゴ )、それらもぜひ見てみたいです。
この先、私(あるいは他の読者)が別のプラットフォームで同じ問題に出くわすことは間違いないでしょう。
私はカスタムルートを使用しており、主に、すべての特殊文字を削除し、すべて小文字にし、すべての空白を置き換えるために文字列を変更する方法を知りたいのですが、どうすればよいですか?
解決方法は?
その方法を紹介します。なお、一見してわかるように、おそらくもっと多くのエッジ条件があるはずです。
これは2番目のバージョンで、5倍のパフォーマンスを得るために展開されたものです(そうです、ベンチマークを取りました)。この関数は1ページあたり何百回も呼び出される可能性があるので、最適化しようと考えたのです。
/// <summary>
/// Produces optional, URL-friendly version of a title, "like-this-one".
/// hand-tuned for speed, reflects performance refactoring contributed
/// by John Gietzen (user otac0n)
/// </summary>
public static string URLFriendly(string title)
{
if (title == null) return "";
const int maxlen = 80;
int len = title.Length;
bool prevdash = false;
var sb = new StringBuilder(len);
char c;
for (int i = 0; i < len; i++)
{
c = title[i];
if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9'))
{
sb.Append(c);
prevdash = false;
}
else if (c >= 'A' && c <= 'Z')
{
// tricky way to convert to lowercase
sb.Append((char)(c | 32));
prevdash = false;
}
else if (c == ' ' || c == ',' || c == '.' || c == '/' ||
c == '\\' || c == '-' || c == '_' || c == '=')
{
if (!prevdash && sb.Length > 0)
{
sb.Append('-');
prevdash = true;
}
}
else if ((int)c >= 128)
{
int prevlen = sb.Length;
sb.Append(RemapInternationalCharToAscii(c));
if (prevlen != sb.Length) prevdash = false;
}
if (i == maxlen) break;
}
if (prevdash)
return sb.ToString().Substring(0, sb.Length - 1);
else
return sb.ToString();
}
このコードが置き換わった(しかし機能的には同等であり、5倍速い)前のバージョンを見るには、この投稿の改訂履歴をご覧ください(日付のリンクをクリック)。
また
RemapInternationalCharToAscii
メソッドのソースコードを見ることができます。
こちら
.
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] MACアドレスの正規表現とは何ですか?
-
[解決済み] 最初のマッチで停止する正規表現
-
[解決済み] URLにセミコロンが含まれていても、有効なのでしょうか?
-
[解決済み] Apache LocationMatch Regex
-
[解決済み] この正規表現に負の小数点を含めるにはどうしたらよいですか?
-
[解決済み] sedで非欲張り(消極的)な正規表現マッチング?
-
[解決済み] Regex空の文字列または電子メール
-
[解決済み] Bashスクリプトで文字列が正規表現にマッチするかどうかをチェックする
-
[解決済み] 正規表現における角括弧と括弧の違いは何ですか?
-
[解決済み] スラッグ(URL文字列)を作成するPHP関数