in reply to question about Encode::decode('iso-8859-1', ...)

Please gone through this below link.
click here
$octets = encode("iso-8859-1", $string);

When you run $octets = encode("utf8", $string) , then $octets may not be equal to $string. Though they both contain the same data, the UTF8 flag for $octets is always off. When you encode anything, UTF8 flag of the result is always off, even when it contains completely valid utf8 string.

   $string = decode("iso-8859-1", $octets);

When you run $string = decode("utf8", $octets) , then $string may not be equal to $octets. Though they both contain the same data, the UTF8 flag for $string is on unless $octets entirely consists of ASCII data (or EBCDIC on EBCDIC machines).