如何在PHP图片比例计算函数中关闭本地化转换避免逗号显示
解决方案
嘿,这个问题我之前也碰到过,多语言站点的本地化设置确实会在这种细节上坑人!给你几个针对这个函数单独处理的办法,不会影响站点其他地方的本地化功能:
方法1:用number_format()强制指定小数点分隔符
这是最直接的方式,在输出比例值的时候,明确告诉PHP要用点作为小数点,完全绕过本地化设置。修改后的函数代码如下:
function getRatio($width,$height) { $ratio = round($height/$width*100,2); $format = $height>$width; if ($format) { echo "data-format='portrait'"; } else { echo "data-format='landscape'"; } // 强制保留2位小数,用点做小数点,无千位分隔符 echo "style='padding-bottom:" . number_format($ratio, 2, '.', '') . "%;'"; }
number_format()的四个参数分别是:要格式化的数值、保留小数位数、小数点分隔符、千位分隔符,这里把第三个参数设为.就搞定了。
方法2:临时切换本地化设置,用完恢复
如果不想用格式化函数,也可以在函数执行期间临时切换到不使用逗号小数点的区域,执行完再切回原来的设置,这样不会影响站点其他功能。代码如下:
function getRatio($width,$height) { // 先保存当前的区域设置 $currentLocale = setlocale(LC_NUMERIC, 0); // 切换到通用的"无本地化"区域(几乎所有服务器都支持) setlocale(LC_NUMERIC, 'C'); $ratio = round($height/$width*100,2); $format = $height>$width; if ($format) { echo "data-format='portrait'"; } else { echo "data-format='landscape'"; } echo "style='padding-bottom:$ratio%;'"; // 恢复原来的区域设置 setlocale(LC_NUMERIC, $currentLocale); }
这里用'C'或者'POSIX'都是通用的无本地化区域,比指定具体语言区域更稳妥,不用担心服务器没装对应的locale。
方法3:用sprintf()格式化输出
sprintf()的格式化规则不受本地化影响,直接按你指定的格式输出数值,也是个很省心的办法:
function getRatio($width,$height) { $ratio = round($height/$width*100,2); $format = $height>$width; if ($format) { echo "data-format='portrait'"; } else { echo "data-format='landscape'"; } // 用%.2f格式化保留两位小数,输出的小数点一定是点 echo sprintf("style='padding-bottom:%.2f%;'", $ratio); }
%.2f表示输出浮点数并保留两位小数,这个语法是标准的,不会受任何本地化设置干扰。
内容的提问来源于stack exchange,提问作者John the Painter
相关产品推荐
相关产品推荐

