Skip to content

Stdlib: mb_trim()/mb_ltrim()/mb_rtrim() — PHP 8.4 named characters param + new builtins (ext/mbstring/mbstring.c) #9977

Description

@PurHur

Category

stdlib · php-src-strict · PHP 8.4

Problem

PHP 8.4 adds mb_trim(), mb_ltrim(), mb_rtrim() with a named characters parameter (distinct from legacy trim() charlist rules). This compiler implements the functions on VM but parity vs php-src must cover:

  • named characters: argument binding (not confused with encoding:)
  • encoding: named parameter when both appear
  • empty/unicode charlist edge cases matching ext/mbstring

Maintainer repro: test/repro/maintainer_gap_mb_trim_named_characters.php

php-src reference

Repro

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh
php bin/vm.php test/repro/maintainer_gap_mb_trim_named_characters.php
# Compare output to Zend PHP 8.4+ on same script
'
<?php
$s = '--héllo--';
var_dump(mb_trim($s, '-'));
var_dump(mb_trim($s, characters: '-'));
var_dump(mb_ltrim($s, characters: '-'));
var_dump(mb_rtrim($s, characters: '-'));
var_dump(mb_trim($s, encoding: 'UTF-8'));

Scope (PHP-in-PHP)

Path Work
ext/mbstring/mb_trim.php, mb_ltrim.php, mb_rtrim.php VM implementations
ext/mbstring/Module.php registration
lib/JIT/Builtin/ defer or route through VmMbstring PHP
script/capability-matrix.php matrix row

Done when

  • Repro dumps match Zend PHP 8.4+ on VM (php-src-strict)
  • Positional + named characters/encoding combinations tested
  • Compliance test/compliance/cases/stdlib/mb_trim_named.phpt green

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:vmVirtual machineenhancementNew feature or requestimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimphase-4:stdlibPhase 4 – stdlib for web appsstdlib

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions