You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSLT调用str_contains等PHP函数实现字符串模式匹配问题咨询

问题原因排查

1. 版本兼容性问题

  • str_contains是PHP 8.0新增的系统函数,若服务器运行PHP 7.x及更低版本,该函数不存在,调用会直接失效,你可以通过输出phpinfo()确认当前服务器的PHP版本。

2. 语法&参数逻辑错误

  • 你的参数顺序完全写反了:PHP所有字符串查找类函数的参数顺序都是待搜索的目标字符串(haystack)在前,要匹配的子串(needle)在后。你现有代码的逻辑是判断固定字符串Written by中是否包含评论内容,和你的需求完全相反,哪怕版本正确也不可能匹配成功。
  • 额外需要确认:你在PHP中实例化XSLT处理器时,是否调用了$xsltProcessor->registerPHPFunctions()方法开启PHP函数调用权限,未开启的情况下所有php:function调用都会被忽略。

兼容全版本的实现方案

需求1:判断评论内容包含指定子串

使用PHP全版本兼容的strpos函数,注意要使用强不等判断避免子串出现在开头时返回0被误判为假:

<!-- in a loop -->
<xsl:choose>
  <xsl:when test="php:functionString('strpos', comment, 'Written by') !== false">
       <xsl:value-of select="comment"/>
  </xsl:when>
</xsl:choose>

需求2:判断评论内容以指定子串开头

可以用strncmp函数(只对比前N个字符,性能更高),N取你要匹配的前缀字符串的长度即可:

<!-- 匹配以"Written by."开头的评论,前缀长度为11 -->
<xsl:choose>
  <xsl:when test="php:functionString('strncmp', comment, 'Written by.', 11) = 0">
       <xsl:value-of select="comment"/>
  </xsl:when>
</xsl:choose>

内容的提问来源于stack exchange,提问作者User970008

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:15:04