phpenv中xsl扩展默认关闭,需手动在php.ini中启用extension=xsl并确保dom、libxml已开启,重启服务后验证;xml/xsl文件须统一utf-8编码并在xsl:output中声明。

phpEnv 中 XSL 扩展默认是关闭的
phpEnv 为了精简和安全,默认不启用 XSL 扩展,哪怕你看到 php -m | grep xsl 没输出,也不代表扩展没编译——大概率只是没开启。直接调用 XSLTProcessor 会报 Class 'XSLTProcessor' not found。
确认 XSL 扩展文件是否存在
先查 php.ini 加载路径:php --ini,然后进对应 php.ini 所在目录,检查扩展目录(extension_dir 值)里有没有 php_xsl.dll(Windows)或 xsl.so(Linux/macOS)。常见位置:
- Windows:
php/ext/php_xsl.dll - Linux/macOS:
php/lib/php/extensions/*/xsl.so
如果文件缺失,说明 phpEnv 构建时没勾选 XSL 支持,需重装带 XSL 的 PHP 版本(如选择「PHP + XSL + OpenSSL」组合包)。
手动开启 XSL 扩展(修改 php.ini)
打开 php.ini,搜索 ;extension=xsl —— 注意它默认是被注释且带分号的。去掉分号,并确保行首无空格:
extension=xsl
⚠️ 容易踩的坑:
- 别写成
extension=php_xsl.dll(Windows 下可省略前缀,phpEnv 约定用xsl) - 别漏掉依赖:XSL 依赖
libxml和dom,确认这两项也已开启(extension=dom,extension=libxml) - 改完必须重启 Web 服务(Apache/Nginx)或 CLI 环境(关掉终端重开)
验证是否生效:php -m | grep xsl 应输出 xsl;或运行 var_dump(class_exists('XSLTProcessor')); 返回 true。
用 XSLTProcessor 转 XML 到 HTML 时的编码注意点
即使扩展开了,transformToXML() 输出乱码或空白,大概率是 XML/XSL 文件本身编码不一致。必须统一为 UTF-8,且显式声明:
- XML 文件头加:
<?xml version="1.0" encoding="UTF-8"?> - XSL 文件头加:
<stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml"></stylesheet>,并在<output></output>中指定:<output method="html" encoding="UTF-8" indent="yes"></output> - PHP 中加载前可强制重编码:
$xmlDoc->loadXML(mb_convert_encoding(file_get_contents('data.xml'), 'UTF-8', 'auto'));
没做这三步,哪怕扩展开着,transformToXML() 也可能静默失败或输出错位 HTML 标签。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











