首页 > 解决方案 > 在php中如何解决setlocale冲突

问题描述

在一个 php 插件中,我编写了这个函数:

function is_number( $nbr ){
    $locale= get_locale();
    setlocale( LC_NUMERIC, $locale );
    return ( is_numeric( $nbr ) || is_float( $nbr ) );
}

...当然有一个命名空间。

问题是该函数会生成一个 css 错误,因为在另一个代码块中,有一个 php 函数来生成不透明度浮点数并创建一个 rbga 作为字符串,rgba(0,0,0,0.5)这要感谢这个函数:

function stylesheet_get_opacity( $opacity = 0 ) {
    $opacity = ($opacity > 0) ? $opacity/100 : 0;
    return $opacity;
} 

所以$opacity应该一直像0.5而不是昏迷。但是,如果我的函数将设置为本地并且您在法国,例如,如果输入$opacity等于50,则输出将是0,5而不是0.5最终会破坏 css。

那么,我该如何解决这个问题而不改变stylesheet_get_opacity我的代码?

也许,我应该在数字检查后重置setLocale,但是怎么做呢?

类似的东西:

function is_number( $nbr ){
    $locale= get_locale();
    setlocale( LC_NUMERIC, $locale );
    $output = ( is_numeric( $nbr ) || is_float( $nbr ) );
    //Here reset setlocale
    return $output;
}

标签: phplocale

解决方案


我从文档中找到了解决方案

在我的情况下,NULL影响语言环境设置并重置它。0价值没有工作。

所以这是完整的解决方案:

function is_number( $nbr ){
    $locale= get_locale();
    setlocale( LC_NUMERIC, $locale );
    $output = ( is_numeric( $nbr ) || is_float( $nbr ) );
    setlocale( LC_NUMERIC, NULL );
    return $output;
}

推荐阅读