How can the PHP code be optimized to handle unsupported characters or unexpected input when encoding and decoding passwords using the provided character map?

When encoding and decoding passwords using a character map, it is important to handle unsupported characters or unexpected input gracefully to prevent encoding errors or security vulnerabilities. One way to optimize the PHP code is to sanitize the input before encoding and decoding to ensure that only valid characters from the character map are used.

```php
<?php
function encodePassword($password, $charMap) {
    $safePassword = preg_replace('/[^'.preg_quote($charMap, '/').']/u', '', $password);
    
    // Encoding logic using $safePassword and $charMap
    
    return $encodedPassword;
}

function decodePassword($encodedPassword, $charMap) {
    $safeEncodedPassword = preg_replace('/[^'.preg_quote($charMap, '/').']/u', '', $encodedPassword);
    
    // Decoding logic using $safeEncodedPassword and $charMap
    
    return $decodedPassword;
}

// Example usage
$charMap = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$password = 'myPassword123';
$encodedPassword = encodePassword($password, $charMap);
$decodedPassword = decodePassword($encodedPassword, $charMap);
```
In the code snippet above, the `encodePassword` and `decodePassword` functions use `preg_replace` to remove any characters that are not present in the specified character map before encoding or decoding the password. This ensures that only valid characters are used, preventing errors or vulnerabilities related to unsupported characters.