首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Googlebot收到错误

Googlebot收到错误
EN

Stack Overflow用户
提问于 2010-09-14 17:49:12
回答 1查看 415关注 0票数 1

我有以下代码作为我的多语言网站的index.php。每种可用的语言都有一个子目录。

代码语言:javascript
复制
<?php


if (isset($_POST['URL']) && strlen($_POST['URL']) == 3) {
         header("location: ".$_POST[URL]);
}
else {

    function lixlpixel_get_env_var($Var)
    {
         if(empty($GLOBALS[$Var]))
         {
             $GLOBALS[$Var]=(!empty($GLOBALS['_SERVER'][$Var]))?
             $GLOBALS['_SERVER'][$Var] : (!empty($GLOBALS['HTTP_SERVER_VARS'][$Var])) ? $GLOBALS['HTTP_SERVER_VARS'][$Var]:'';
         }
    }

    function lixlpixel_detect_lang()
    {
         // Detect HTTP_ACCEPT_LANGUAGE & HTTP_USER_AGENT.
         lixlpixel_get_env_var('HTTP_ACCEPT_LANGUAGE');
         lixlpixel_get_env_var('HTTP_USER_AGENT');

         $_AL=strtolower($GLOBALS['HTTP_ACCEPT_LANGUAGE']);
         $_UA=strtolower($GLOBALS['HTTP_USER_AGENT']);

         // Try to detect Primary language if several languages are accepted.
         foreach($GLOBALS['_LANG'] as $K)
         {
             if(strpos($_AL, $K)===0)
             return $K;
         }

         // Try to detect any language if not yet detected.
         foreach($GLOBALS['_LANG'] as $K)
         {
             if(strpos($_AL, $K)!==false)
             return $K;
         }
         foreach($GLOBALS['_LANG'] as $K)
         {
             if(preg_match("/[[( ]{$K}[;,_-)]/",$_UA))
             return $K;
         }

         // Return default language if language is not yet detected.
         return $GLOBALS['_DLANG'];
    }

    // Define default language.
    $GLOBALS['_DLANG']='en';

    // Define all available languages.
    // WARNING: uncomment all available languages

    $GLOBALS['_LANG'] = array(
    'en', // english.
    'es', // spanish.
    'fr', // french.
    );

    /*
    $GLOBALS['_LANG'] = array(
    'af', // afrikaans.
    'ar', // arabic.
    'bg', // bulgarian.
    'ca', // catalan.
    'cs', // czech.
    'da', // danish.
    'de', // german.
    'el', // greek.
    'en', // english.
    'es', // spanish.
    'et', // estonian.
    'fi', // finnish.
    'fr', // french.
    'gl', // galician.
    'he', // hebrew.
    'hi', // hindi.
    'hr', // croatian.
    'hu', // hungarian.
    'id', // indonesian.
    'it', // italian.
    'ja', // japanese.
    'ko', // korean.
    'ka', // georgian.
    'lt', // lithuanian.
    'lv', // latvian.
    'ms', // malay.
    'nl', // dutch.
    'no', // norwegian.
    'pl', // polish.
    'pt', // portuguese.
    'ro', // romanian.
    'ru', // russian.
    'sk', // slovak.
    'sl', // slovenian.
    'sq', // albanian.
    'sr', // serbian.
    'sv', // swedish.
    'th', // thai.
    'tr', // turkish.
    'uk', // ukrainian.
    'zh' // chinese.
    );
    */

    // Redirect to the correct location.


    header('location: /'.lixlpixel_detect_lang());
    //header('location: http://www.your_site.com/index_'.lixlpixel_detect_lang().'.php'); // Example Implementation
    echo 'The Language detected is: '.lixlpixel_detect_lang(); // For Demonstration

}

?>

问题是,尽管这在用户浏览器中工作得很好,但在搜索引擎(如Googlebot)中会抛出以下错误:

代码语言:javascript
复制
    <br />
<b>Warning</b>:  preg_match() [<a href='function.preg-match'>function.preg-match</a>]: Compilation failed: range out of order in character class at offset 12 in <b>/index.php</b> on line <b>41</b><br />
<br />
<b>Warning</b>:  preg_match() [<a href='function.preg-match'>function.preg-match</a>]: Compilation failed: range out of order in character class at offset 12 in <b>/index.php</b> on line <b>41</b><br />
<br />
<b>Warning</b>:  preg_match() [<a href='function.preg-match'>function.preg-match</a>]: Compilation failed: range out of order in character class at offset 12 in <b>/index.php</b> on line <b>41</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /index.php:41) in <b>/index.php</b> on line <b>110</b><br />
<br />
<b>Warning</b>:  preg_match() [<a href='function.preg-match'>function.preg-match</a>]: Compilation failed: range out of order in character class at offset 12 in <b>/index.php</b> on line <b>41</b><br />
<br />
<b>Warning</b>:  preg_match() [<a href='function.preg-match'>function.preg-match</a>]: Compilation failed: range out of order in character class at offset 12 in <b>/index.php</b> on line <b>41</b><br />
<br />
<b>Warning</b>:  preg_match() [<a href='function.preg-match'>function.preg-match</a>]: Compilation failed: range out of order in character class at offset 12 in <b>/index.php</b> on line <b>41</b><br />
The Language detected is: en

我尝试过错误处理,但我不是一个PHP程序员,我是一个CF程序员,所以我真的需要一些帮助!

EN

回答 1

Stack Overflow用户

发布于 2010-09-14 17:54:39

character class中,-表示一个范围。在本例中,[;,_-)]中的_-)被解释为范围( _)之间的每个字符都包括在内)。但_ (0x95)在) (0x28)之后,因此_-)是无效范围。

如果您指的是三个单独的字符_-),则对-进行转义

代码语言:javascript
复制
[;,_\-)]

除此之外,是一个加权值列表(参见q参数)。这意味着只出现一个特定的语言标签并不一定意味着它是最受欢迎的语言。可能有一些语言更受欢迎(Q值更高),甚至根本不被接受(例如q=0)。

因此,您应该更好地解析列表并找到首选语言和可用语言的最佳匹配,而不是仅仅寻找特定语言标记的出现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3707770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档