0

文字列を受け入れてseolinkに変換する関数を作成しようとしています。しかし、それは非常に非専門的に見えます

それを最適化するためのより良い方法は何でしょうか?特殊文字が多すぎる可能性があるため。

関数の外観は次のようになります

  function seo_url($title) {
        $titel = substr($title,0,160);

        // Replace underscore with "-" 
        $titel = ereg_replace("_","-",$title);

        // Replace space with "-" 
        $titel = ereg_replace(" ","-",$title); 

       // Replace special characters
        $titel = Ereg_replace ("À", "A", $Titel); 
        $titel = ereg_replace("í", "i", $title); 
        $titel = ereg_replace("ó", "o", $title); 
        $titel = ereg_replace("ú", "u", $title); 
        $titel = ereg_replace("ñ", "n", $title); 
        $titel = ereg_replace("Ñ", "n", $title); 

        $titel = Strtolower (trim($title)); 
4

5 に答える 5

1

私はこの関数を使用してURLをクリーンアップします。これはあなたの関数と似ていますが、正規表現は使用しません。

function seo_url($str) {
  $str = mb_strtolower($str);
  $str = trim($str);
  $str = str_replace(array(' ', '\'', ',', '.', ';', ':'), '', $str);
  $str = str_replace('_', '-', $str);
  $str = str_replace(array('á', 'é', 'í', 'ó', 'ú', 'ö', 'ü', 'à', 'è', 'ì', 'ò', 'ù', 'â', 'ê', 'î', 'ô', 'û', 'ñ', 'ç'),
                     array('a', 'e', 'i', 'o', 'u', 'o', 'u', 'a', 'e', 'i', 'o', 'u', 'a', 'e', 'i', 'o', 'u', 'n', 'c'),
                     $str);


  return $str;
}
于 2012-10-01T13:42:52.840 に答える
1

文字列に何を保持するのではなく、何を置き換えるのかを言うのはなぜですか。後ろ向きに歩くようなものです。例:

$string = preg_replace('/[^a-z0-9_]/i', '_', $string); 
$string = preg_replace('/_[_]*/i', '_', $string); 

以下の全機能:

public function getStringAsURL($string){ 
            // Define the maximum number of characters allowed as part of the URL 

            $currentMaximumURLLength = 100; 

            $string = strtolower($string); 

            // Any non valid characters will be treated as _, also remove duplicate _ 

            $string = preg_replace('/[^a-z0-9_]/i', '_', $string); 
            $string = preg_replace('/_[_]*/i', '_', $string); 

            // Cut at a specified length 

            if (strlen($string) > $currentMaximumURLLength) 
            { 
                $string = substr($string, 0, $currentMaximumURLLength); 
            } 

            // Remove beggining and ending signs 

            $string = preg_replace('/_$/i', '', $string); 
            $string = preg_replace('/^_/i', '', $string); 

            return $string; 
        } 
于 2012-10-08T11:02:09.860 に答える
0

私が知っている方法から、 .htaccessRewriteRuleを読み取ることでメリットが得られると思います

PHPからこの種のロジックを削除することで非常に役立つ可能性があります

これは私がここで見つけたこの種のロジックを使用する例です(グーグル関連のSEOのためにスペースをダッシュ​​に書き換えます)

于 2012-10-01T13:27:09.453 に答える
0

見栄えを良くして小さくする唯一の実際の方法は、正規表現でor式を使用することです。

すなわち。

ereg_replace("Ñ|ñ", "n", $title);
ereg_replace("è|é|ê|ë","e", $title);

私が見た限りでは、これはこれを行うための最も一般的な方法であり、また私が推測するのが速いでしょう。

文字コード表をダウンロードするか、正規表現文字列を生成するために独自の文字コード表を作成してから、編集しやすいように文字コード表を自分で保存することもできます。

次に、各文字を対応する文字にマップする外部文字コード表にロードされるため、コードは再びはるかに小さく、より堅牢になります。

PHPでアクセント付きUTF-8文字を削除する別のソリューション

于 2012-10-01T13:30:17.800 に答える
0

クラス関数を使用するTranslit::makeUrl($str)

final class Translit {

    static function translit($string) {

        $replace=array(
            "_"=>"-",
            "`"=>"",
            "a"=>"a",
            "À"=>"A",
            "б"=>"b",
            "Б"=>"B",
            // etc.
        );
        return $str=iconv("UTF-8","UTF-8//IGNORE",strtr($string,$replace));
    }

    static function makeUrl($str) {
        $result = self::translit($str);

        $result = str_replace(' ', '-', $result);
        $result = preg_replace('/[\-]{2,}/','', $result);

        return strtolower($result);
    }
}
于 2012-10-01T13:45:20.930 に答える