echo $rpl = preg_replace('/[^a-zA-Z0-9_-](?![a-zA-Z0-9_]*?$)/','_',$string);
oppure
echo $rpl = preg_replace('/(?i)[^a-z0-9_-](?![a-z0-9_]*?$)/','_',$string);
echo $rpl = preg_replace('/[^a-zA-Z0-9_-](?![a-zA-Z0-9_]*?$)/','_',$string);
oppure
echo $rpl = preg_replace('/(?i)[^a-z0-9_-](?![a-z0-9_]*?$)/','_',$string);