0

こんにちは私はすべてのURLがseoにあるウェブサイトを持っています今私は私のサイトをウルドゥー語に転送していますが、URLがウルドゥー語であるため正しいURLが表示されません誰もが私が使用できるseo機能を持っていますか?

私のサイトのURLはこのdomain.com/123//のようになりました。このdomain.com/123/عوأنالاأعرفمنأينأستطيعأنأراك/のようになります。

これは私が現在持っているコードです。

function seoUrl($input)
    {
    /** 
    * Return URL-Friendly string slug
    * @param string $input 
    * @return string 
    */
        $input = remove_accent( $input );
        $input = str_replace(" ", " ", $input);
        $input = str_replace(array("'", "-"), "", $input); //remove single quote and dash
        $input = mb_convert_case($input, MB_CASE_LOWER, "UTF-8"); //convert to lowercase
        $input = preg_replace("#[^a-zA-Z]+#", "-", $input); //replace everything non an with dashes
        $input = preg_replace("#(-){2,}#", "$1", $input); //replace multiple dashes with one
        $input = trim($input, "-"); //trim dashes from beginning and end of string if any
        return $input;
    }

    function remove_accent( $str )
    {
        $a = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Æ', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ð', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 
                    'Ø', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'ß', 'à', 'á', 'â', 'ã', 'ä', 'å', 'æ', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 
                    'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ø', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 
                    'C', 'c', 'C', 'c', 'D', 'd', 'Ð', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 
                    'g', 'G', 'g', 'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', '?', '?', 'J', 'j', 'K', 'k', 
                    'L', 'l', 'L', 'l', 'L', 'l', '?', '?', 'L', 'l', 'N', 'n', 'N', 'n', 'N', 'n', '?', 'O', 'o', 'O', 'o', 'O', 'o', 
                    'Œ', 'œ', 'R', 'r', 'R', 'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'Š', 'š', 'T', 't', 'T', 't', 'T', 't', 'U', 
                    'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Ÿ', 'Z', 'z', 'Z', 'z', 'Ž', 'ž', '?', 
                    'ƒ', 'O', 'o', 'U', 'u', 'A', 'a', 'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', '?', '?', 
                    '?', '?', '?', '?');

        $b = array('A', 'A', 'A', 'A', 'A', 'A', 'AE', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'D', 'N', 'O', 'O', 'O', 'O', 'O', 
                   'O', 'U', 'U', 'U', 'U', 'Y', 's', 'a', 'a', 'a', 'a', 'a', 'a', 'ae', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 
                   'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'a', 'A', 'a', 'A', 'a', 'C', 'c', 'C', 'c', 'C', 'c', 
                   'C', 'c', 'D', 'd', 'D', 'd', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'E', 'e', 'G', 'g', 'G', 'g', 'G', 'g', 'G', 'g', 
                   'H', 'h', 'H', 'h', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'I', 'i', 'IJ', 'ij', 'J', 'j', 'K', 'k', 'L', 'l', 'L', 'l', 
                   'L', 'l', 'L', 'l', 'l', 'l', 'N', 'n', 'N', 'n', 'N', 'n', 'n', 'O', 'o', 'O', 'o', 'O', 'o', 'OE', 'oe', 'R', 'r', 'R', 
                   'r', 'R', 'r', 'S', 's', 'S', 's', 'S', 's', 'S', 's', 'T', 't', 'T', 't', 'T', 't', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 
                   'u', 'U', 'u', 'U', 'u', 'W', 'w', 'Y', 'y', 'Y', 'Z', 'z', 'Z', 'z', 'Z', 'z', 's', 'f', 'O', 'o', 'U', 'u', 'A', 'a', 
                   'I', 'i', 'O', 'o', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'U', 'u', 'A', 'a', 'AE', 'ae', 'O', 'o');

        return str_replace($a, $b, $str);
    }
4

1 に答える 1

-1

問題は@decezeが指摘したことです。URL にはラテン アルファベット内 (実際には英語のアルファベット内) の文字のみを含めることができるため、URL でウルドゥー語を使用する唯一の方法は、英字を使用することです。

たとえば、私はカタロニア語を話しますが、アクセントがあることとは別に、次の文字があります。ほとんどcですが、 s のように聞こえるので、テキストを ç (たとえば、Març) でスラッグするときは、Marc (文字の類似性) または Mars (音声の類似性) のいずれかを使用します。このパターンに従うことができます。そうでなければ、あなたにできることは何もないと思います。

編集: URLエンコーディングの高速クラスの後、この回答の下のコメントを読む必要があります。

私はあなたの機能を完全に読むようになりました.「舞台裏」で何が起こっているのかをたまたま理解していると思います:

ウルドゥー語の文字列を取得します。前に置いたものを言ってください。ع وأنا لا أعرف من أين أستطيع أن أراك

  1. に渡しますremove_accent()。アクセントのない他のウルドゥー文字に置き換えられるウルドゥー文字は含まれていないため、同じ文字列を返します: ع وأنا لا أعرف من أين أستطيع أن أراك.
  2. それらを置き換えることにより、奇妙なシンボルがないことを確認します。この場合、文字列はそのまま残りますع وأنا لا أعرف من أين أستطيع أن أراك
  3. すべての文字を小文字に変換します。私はウルドゥー語を知らないので、ここで何かが起こるかどうかわからないので、そのままにしておきます: ع وأنا لا أعرف من أين أستطيع أن أراك. そして、ここで問題が発生します
  4. ラテン アルファベット以外のものはダッシュに置き換えます。この場合、次のようになります------------------------------------
  5. 2 つ以上のダッシュのグループを 1 つのダッシュに置き換えます: -
  6. 最後に、その 1 つのダッシュをトリムします。(empty).

したがって、あなたが抱えていた主な問題は、最初の正規表現関数でした。それを修正する方法がわかりません。おそらく、これらすべての文字を ASCII に変換し、それを修正しようとする正規表現を作成するというトリックがあります。ただし、次の手順を実行します。

  1. のような記号から文字列を消去し、_., !'?&それらを に変換し-ます。
  2. 繰り返されるアイテムを削除します。
  3. 文字列を小文字にする
  4. 文字列をブラウザで読み取り可能なものに変換します(utf8_decode()おそらく十分ですが、試したことはありません)
于 2012-08-31T19:39:25.520 に答える