0

嗨,我有一个网站,它的所有 url 都在 seo 中,现在我将我的网站转移到 urdu 语言,但是因为 url 是 urdu 语言,所以它不显示正确的 url 是否有人有我可以使用的 seo 功能。

我的网站网址现在像这个 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 指出的。网址只能包含拉丁字母(实际上是英文字母)中的字符,因此在您的网址中使用乌尔都语的唯一方法是使用英文字母的最佳方法。

例如,我说加泰罗尼亚语,并且由于口音的一部分,我们得到了这个字母:ç。它几乎是一个c,但它听起来像一个s,所以当用 ç (例如,Març )敲击文本时,我会选择 Marc (字符相似性)或 Mars (语音相似性)。你可以遵循这个模式。否则,我认为您无能为力。

编辑: 在 url 编码的快速课程之后,你们都应该阅读这个答案下面的评论。

我转向完全阅读您的功能,我想我碰巧了解“幕后”发生的事情:

你得到你的乌尔都语字符串,说你之前放的那个:ع وأنا لا أعرف من أين أستطيع أن أراك

  1. 你把它传给remove_accent(). 它不包含任何要替换为其他没有重音符号的乌尔都语字符,因此它返回相同的字符串:ع وأنا لا أعرف من أين أستطيع أن أراك
  2. 您可以通过替换它们来确保没有奇怪的符号。在这种情况下,字符串将保持原样ع وأنا لا أعرف من أين أستطيع أن أراك
  3. 您将所有字符转换为小写。我不知道乌尔都语,所以我不确定这里是否会发生任何事情,所以我将保持原样:ع وأنا لا أعرف من أين أستطيع أن أراك问题来了
  4. 您将与拉丁字母不同的任何内容替换为破折号。在这种情况下,它看起来像这样------------------------------------
  5. 您用一个破折号替换任何 2 个或更多破折号组:-
  6. 你,最后,修剪那条破折号。(empty).

因此,您遇到的主要问题是第一个正则表达式函数。我不知道如何解决这个问题。可能有一个技巧将所有这些字符转换为 ASCII,然后创建一个正则表达式来尝试解决这个问题。但是,我会采取以下步骤:

  1. 从符号中清除字符串 like_., !'?&并将它们转换为-.
  2. 删除重复的项目。
  3. 小写字符串
  4. 将字符串转换为浏览器可读的内容(utf8_decode()可能就足够了,但我还没有尝试过)
于 2012-08-31T19:39:25.520 回答