note 126450 added to function.mb-ereg-search-setpos

From: Date: Wed, 22 Sep 2021 16:25:49 +0000
Subject: note 126450 added to function.mb-ereg-search-setpos
Groups: php.notes 
Request: Send a blank email to php-notes+get-216995@lists.php.net to get a copy of this message
This method, like mb_ereg_search_pos, appears to use byte offsets, not character offsets. This seems counter intuitive for the mb_* methods, which inherently take a "character" view of strings, as opposed to a "byte" based view. Even the mb_strpos method returns a character offset. The following code reveals this byte-oriented behaviour: <?php $x = 'abc456789'. "\u{1000}" .'abc4567890'; $re = 'ab.'; echo 'x='. $x .PHP_EOL; echo 're='. $re .PHP_EOL; mb_ereg_search_init( $x ); mb_internal_encoding( mb_detect_encoding( $x) ); echo 'mb_strlen='. mb_strlen( $x ) .PHP_EOL; echo 'strlen='. strlen( $x ) .PHP_EOL; foreach ( array( 0, 9, 10, 11, 12, 13 ) as $o ) { mb_ereg_search_setpos( $o ); echo 'Offset='. $o .' mb_substr='. mb_substr( $x, $o ) .' substr='. substr( $x, $o ) .' mb_ereg_search_regs='. print_r( mb_ereg_search_regs( $re ), true ) .PHP_EOL; } ?> With character offsets, we would expect offsets 11 and above to return no search result, whereas what we see is: <?php =abc456789ကabc4567890 re=ab. mb_strlen=20 strlen=22 Offset=0 mb_substr=abc456789ကabc4567890 substr=abc456789ကabc4567890 mb_ereg_search_regs=Array ( [0] => abc ) Offset=9 mb_substr=ကabc4567890 substr=ကabc4567890 mb_ereg_search_regs=Array ( [0] => abc ) Offset=10 mb_substr=abc4567890 substr=��abc4567890 mb_ereg_search_regs=Array ( [0] => abc ) Offset=11 mb_substr=bc4567890 substr=�abc4567890 mb_ereg_search_regs=Array ( [0] => abc ) Offset=12 mb_substr=c4567890 substr=abc4567890 mb_ereg_search_regs=Array ( [0] => abc ) Offset=13 mb_substr=4567890 substr=bc4567890 mb_ereg_search_regs= ?> ---- Server IP: 45.112.84.4 Probable Submitter: 45.112.85.242 (proxied: 62.3.121.6) ---- Manual Page -- https://php.net/manual/en/function.mb-ereg-search-setpos.php Edit -- https://main.php.net/note/edit/126450 Del: integrated -- https://main.php.net/note/delete/126450/integrated Del: useless -- https://main.php.net/note/delete/126450/useless Del: bad code -- https://main.php.net/note/delete/126450/bad+code Del: spam -- https://main.php.net/note/delete/126450/spam Del: non-english -- https://main.php.net/note/delete/126450/non-english Del: in docs -- https://main.php.net/note/delete/126450/in+docs Del: other reasons-- https://main.php.net/note/delete/126450 Reject -- https://main.php.net/note/reject/126450 Search -- https://main.php.net/manage/user-notes.php

« previous php.notes (#216995) next »