9

ブログエントリなどのタイトルをユーザーフレンドリーなURLに変換したい。私はそれを行うためにrawurlencode()を使用しましたが、それは私にのような多くの奇妙な文字列を与えます%s

アルゴリズムでは、Ö、Äなどのドイツ語の文字を考慮する必要があります。タイトルからURLを作成し、URLをデコードしてタイトルを取得できるようにします。

私はこのコードのいくつかを試しました:http://pastebin.com/L1SwESBnこれは他のいくつかの質問で提供されていますが、それは一方向のようです。

例えばHÖRZU.de -> hoerzu-de -> HÖRZU.de

何か案は?

4

4 に答える 4

8

スラッグを作成したいのですが、経験から、デコードの可能性は限られていると言えます。たとえば、「Foo-Bar」は「foo-bar」になりますが、それがずっと「foobar」でも「foo-bar」でもなかったことをどうやって知ることができるでしょうか。

または、ナメクジに入れたくない、また「 `」のような表現がない文字はどうですか?したがって、1対1の会話を使用しrawurlencode()たり、Slugを作成したりできます。これは関数の例ですが、前述したように、信頼できるデコードは不可能です。情報を破棄する必要があるため、その性質上です。

function sanitizeStringForUrl($string){
    $string = strtolower($string);
    $string = html_entity_decode($string);
    $string = str_replace(array('ä','ü','ö','ß'),array('ae','ue','oe','ss'),$string);
    $string = preg_replace('#[^\w\säüöß]#',null,$string);
    $string = preg_replace('#[\s]{2,}#',' ',$string);
    $string = str_replace(array(' '),array('-'),$string);
    return $string;
}
于 2010-12-24T08:58:31.287 に答える
2
function url_title($ str、$ Separator ='dash'、$ lowercase = FALSE)
 {{
  if($ Separator =='ダッシュ')
  {{
   $ search ='_';
   $ replace ='-';
  }
  そうしないと
  {{
   $ search ='-';
   $ replace ='_';
  }

  $ trans = array(
      '&\#\ d + ?;' =>''、
      '&\ S + ?;' =>''、
      '\ s +'=> $ replace、
      '[^ a-z0-9 \-\ ._]' =>''、
      $replace。'+'=> $ replace、
      $replace。'$'=> $ replace、
      '^'。$replace=> $ replace、
      '\。+$'=>''
       );

  $ str = strip_tags($ str);

  foreach($ trans as $ key => $ val)
  {{
   $ str = preg_replace( "#"。$key。"#i"、$ val、$ str);
  }

  if($ lowercase === TRUE)
  {{
   $ str = strtolower($ str);
  }

  トリムを返す(stripslashes($ str));
 }
于 2010-12-24T09:23:09.117 に答える
1

私が考える最もエレガントな方法は、Behat \ Transliterator\Transliteratorを使用することです。

このクラスは抽象であるため、クラスごとに拡張する必要があります。次のようなものもあります。

<?php
use Behat\Transliterator\Transliterator;

class Urlizer extends Transliterator
{
}

そして、それを使用してください:

$text = "Master Ápiu";
$urlizer = new Urlizer();
$slug = $urlizer->transliterate($slug, "-");
echo $slug; // master-apiu

もちろん、これも作曲家に入れるべきです。

composer require behat/transliterator

詳細はこちらhttps://github.com/Behat/Transliterator

于 2016-12-14T16:58:52.050 に答える
0

スラッグを元の形に「デコード」する信頼できる方法はありません。ここでの最善の解決策は、スラッグとそのオリジナルをデータベース化することです。

于 2021-09-01T11:11:44.363 に答える