Alpine下PHP扩展ICONV不工作

错误

Notice: iconv(): Wrong charset, conversion from UTF-8' toUTF-8//IGNORE’ is not allowed in Command line code on line 1

原因

在最新版本的 gnu-libiconv 中,不再包含 preloadable_libiconv.so。

解决

在使用alpine:3.12镜像时,可以执行以下命令解决:

1
2
RUN apk --no-cache --allow-untrusted --repository http://dl-cdn.alpinelinux.org/alpine/edge/community/ add gnu-libiconv=1.15-r2
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so

在使用alpine:3.13镜像时,可以执行以下命令解决:

1
2
RUN apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/v3.13/community/ gnu-libiconv=1.15-r3
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php

测试

执行以下命令,可用来验证 icnov 是否正常工作:

1
php -d error_reporting=22527 -d display_errors=1 -r 'var_dump(iconv("UTF-8", "UTF-8//IGNORE", "This is the Yuan symbol '\'''\''."));'

参考