[英]preg_grep(): Compilation failed: nothing to repeat at offset 0
將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);
發出警告$matches = preg_grep('/'.$lang.'/', $available);
警告;
PHP Warning: preg_grep(): Compilation failed: nothing to repeat at offset 0 ...
可能是什么問題? 提前致謝!
@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']
返回空結果時,它將返回默認的語言代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.