preg_grep():编译失败:在偏移量 0 处没有可重复的内容
Posted
技术标签:
【中文标题】preg_grep():编译失败:在偏移量 0 处没有可重复的内容【英文标题】:preg_grep(): Compilation failed: nothing to repeat at offset 0 【发布时间】:2018-06-22 07:07:20 【问题描述】:将我的 php 从 5.3 更新到 7.1.9 后,我的 get_browser_language
函数不断收到此错误。
我尝试使用几种方法调试它,但没有运气,变量等都是正确的。
代码;
function get_browser_language( )
global $cachedb;
$available = array();
$default = get_option('def_lang','tr');
// List available
$avails = $cachedb->get_results( "SELECT `lang_code` FROM ".DB_PREFIX."languages");
foreach ($avails as $av)
$available[] = $av->lang_code;
if ( isset( $_SERVER[ 'HTTP_ACCEPT_LANGUAGE' ] ) )
$langs = explode( ',', $_SERVER['HTTP_ACCEPT_LANGUAGE'] );
if ( empty( $available ) )
return $default;
foreach ( $langs as $lang )
$lang = substr( $lang, 0, 2 );
if( in_array( $lang, $available ) )
return $lang;
//Test for XX-nr
$matches = preg_grep('/'.$lang.'/', $available);
if($matches)
if(isset($matches[0]))
return $matches[0];
return $default;
我不断收到$matches = preg_grep('/'.$lang.'/', $available);
的警告
警告;
PHP Warning: preg_grep(): Compilation failed: nothing to repeat at offset 0 ...
可能是什么问题?提前致谢!
【问题讨论】:
$lang
的具体内容是什么?我猜某处有*
或+
。
@Toto $lang
的确切结果是 en
、ro
、es
或 tr
【参考方案1】:
@Toto 通过他的评论给了我一个想法。花一些时间检查$_SERVER['HTTP_ACCEPT_LANGUAGE']
值后,它有时会返回空值,我相信这就是我收到此警告的原因。
所以基本上我做了以下事情;
我变了
//Test for XX-nr
$matches = preg_grep('/'.$lang.'/', $available);
到这个;
//Test for XX-nr
if(ctype_alnum($lang))
$matches = preg_grep('/'.$lang.'/', $available);
//error_log(print_r("LANG: " . $lang, TRUE));
所以当$_SERVER['HTTP_ACCEPT_LANGUAGE']
返回空结果时,它会返回默认的语言代码。
【讨论】:
以上是关于preg_grep():编译失败:在偏移量 0 处没有可重复的内容的主要内容,如果未能解决你的问题,请参考以下文章