|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2002-03-13 07:31 UTC] markus dot pfefferle at web dot de
A preg_replace_callback() that calls a callback function which in turn makes use of a preg_replace_callback() function too, will not work correctly. The first preg_replace_callback() will substitute gibberisch even though the callback function returned a valid string.
Example:
function funcB($arr)
{
...
return $whatever;
}
function funcA($arr)
{
...
$t = preg_replace_callback("/%value([0-9]+)%/", "funcB", $someotherhaystack)
return $t; // $t still makes sense here
}
echo preg_replace_callback("/%text([0-9]+)%/", "funcA", $haystack);
// but whatever funcA returned, just some gibberisch is substituted for /%text[0-9]+%/
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Dec 02 09:00:01 2025 UTC |
the code below works fine for me. please provide a complete example of code that fails. function funcB($arr) { return 'whatever'; } function funcA($arr) { $someotherhaystack = '%value1% foo %value2%'; $t = preg_replace_callback("/%value([0-9]+)%/", "funcB", $someotherhaystack); return $t; // $t still makes sense here } $haystack = '%text12% bar %text13%'; echo preg_replace_callback("/%text([0-9]+)%/", "funcA", $haystack);This also holds true for yesterday's CVS snapshot of PHP6, in Windows XP. I tried installing MediaWiki with the PHP6 snapshot and found that the table prefix replacement in includes/db/Database.php:replaceVars() returns corrupt data sporadically. I found that pref_replace_callback() was the source of the corruption. This statement: $ins = preg_replace_callback( '/\/\*(?:\$wgDBprefix|_)\*\/([a-zA-Z_0-9]*)/', array( &$this, 'tableNameCallback' ), $ins ); called the tableName() method through the callback tableNameCallback(). The former method returned a proper string but the end result in $ins was corrupted. On finding this earlier report, I looked closer at the Database.tableName() method and found a call to preg_match() there.