1

StackOverflow Web サイトで気づいたこと:

StackOverflow.com の質問の URL にアクセスした場合:

「https://stackoverflow.com/questions/10721603」

ウェブサイトは質問の名前を URL の末尾に追加するため、次のようになります。

「https://stackoverflow.com/questions/10721603/grid-background-image-using-imagebrush」

これは素晴らしいことです。これにより、URL がより意味のあるものになり、おそらく SEO の手法として優れていることがわかります。

StackOverflow でこの実装を見て達成したかったこと

私は自分のウェブサイトで同じことを実装したいと考えています。これを実現するために 301 リダイレクトを使用することに満足してheader()いますが、このトリックを実行するタイトなスクリプトを考え出そうとしています。

これまでの私のコード

ここをクリックして動作を確認してください

// Set the title of the page article (This could be from the database).  Trimming any spaces either side
$original_name = trim(' How to get file creation & modification date/times in Python with-dash?');

// Replace any characters that are not A-Za-z0-9 or a dash with a space
$replace_strange_characters = preg_replace('/[^\da-z-]/i', " ", $original_name);

// Replace any spaces (or multiple spaces) with a single dash to make it URL friendly
$replace_spaces = preg_replace("/([ ]{1,})/", "-", $replace_strange_characters);

// Remove any trailing slashes
$removed_dashes = preg_replace("/^([\-]{0,})|([\-]{2,})|([\-]{0,})$/", "", $replace_spaces);

// Show the finished name on the screen
print_r($removed_dashes);

問題

私はこのコードを作成しましたが、見た目は問題なく動作します。これにより、文字列 URL が人間の目で見やすく、読みやすくなります。ただし、コードがおそらく複雑すぎると感じているので、少し単純化または「強化」できるかどうかを確認したいと思います。

関数を互いに入れ子にすることでそれを行うことができるので、1行にまとめたいとはあまり思いませんが、それを達成するための全体的に簡単な方法があるかもしれないと感じています-アイデアを探しています.

要約すると、コードは次のことを実現します。

  • 「奇妙な」文字を削除し、スペースに置き換えます
  • URL フレンドリーにするためにスペースをダッシュ​​に置き換えます
  • 単語がダッシュで区切られ、末尾にスペースやダッシュがない、スペースを含まない文字列を返します
  • 文字列は読み取り可能です (単純に使用するようなパーセント記号や + 記号は含まれません)urlencode()

ご協力いただきありがとうございます!

考えられる解決策

この記事を書いているときに、URL の「スラッグ」として知られているものを探していることがわかりました。これらは実際に SEO に役立ちます。

最初のインスタンスでうまく機能するように見えるGoogle コードでこのライブラリを見つけました。

SOに関するこれに関する注目すべき質問もあります。ここには、他の例があります。

4

2 に答える 2

1

私はあなたのようにプレグで遊んでみました。しかし、外国語を見始めると、ますます複雑になります。私がやったことは、単にタイトルをトリミングし、urlencodeを使用することでした

$url_slug = urlencode($title);

また、それらを追加する必要がありました:

$title = str_replace('/','',$title); //Apache doesn't like this character even encoded
$title = str_replace('\\','',$title); //Apache doesn't like this character even encoded

次のようなサードパーティのライブラリもあります: http://cubiq.org/the-perfect-php-clean-url-generator

于 2013-10-30T15:34:09.403 に答える
0

確かに、あなたはそれを行うことができます:

$original_name = ' How to get file creation & modification date/times in Python with-dash?';

$result = preg_replace('~[^a-z0-9]++~i', '-', $original_name);
$result = trim($result, '-');

他のアルファベットを扱うには、代わりにこのパターンを使用できます。

~\P{Xan}++~u

また

~[^\pL\pN]++~u
于 2013-10-30T15:56:08.907 に答える