mirror of
https://github.com/php/php-src.git
synced 2026-03-25 16:52:18 +01:00
In a2bc57e0e5, mb_detect_encoding was modified to ensure it would never
return 'UUENCODE', 'QPrint', or other non-encodings as the "detected
text encoding". Before mb_detect_encoding was enhanced so that it could
detect any supported text encoding, those were never returned, and they
are not desired. Actually, we want to eventually remove them completely
from mbstring, since PHP already contains other implementations of
UUEncode, QPrint, Base64, and HTML entities.
For more clarity on why we need to suppress UUEncode, etc. from being
detected by mb_detect_encoding, the existing UUEncode implementation
in mbstring *never* treats any input as erroneous. It just accepts
everything. This means that it would *always* be treated as a valid
choice by mb_detect_encoding, and would be returned in many, many cases
where the input is obviously not UUEncoded.
It turns out that the form of mb_convert_encoding where the user passes
multiple candidate encodings (and mbstring auto-detects which one to
use) was also affected by the same issue. Apply the same fix.
121 lines
3.7 KiB
PHP
121 lines
3.7 KiB
PHP
--TEST--
|
|
mb_convert_encoding()
|
|
--EXTENSIONS--
|
|
mbstring
|
|
--INI--
|
|
output_handler=
|
|
mbstring.language=Japanese
|
|
--FILE--
|
|
<?php
|
|
// TODO: Add more tests
|
|
|
|
$sjis = base64_decode('k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==');
|
|
$jis = base64_decode('GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==');
|
|
$euc_jp = "\xC6\xFC\xCB\xDC\xB8\xEC\xA5\xC6\xA5\xAD\xA5\xB9\xA5\xC8\xA4\xC7\xA4\xB9\xA1\xA301234\xA3\xB5\xA3\xB6\xA3\xB7\xA3\xB8\xA3\xB9\xA1\xA3";
|
|
|
|
// Test with single "form encoding"
|
|
echo "== BASIC TEST ==\n";
|
|
$s = bin2hex(mb_convert_encoding($sjis, 'EUC-JP', 'SJIS'));
|
|
print("EUC-JP: $s\n"); // EUC-JP
|
|
|
|
$s = bin2hex(mb_convert_encoding($jis, 'EUC-JP', 'JIS'));
|
|
print("EUC-JP: $s\n"); // EUC-JP
|
|
|
|
$s = mb_convert_encoding($euc_jp, 'SJIS', 'EUC-JP');
|
|
print("SJIS: ".base64_encode($s)."\n"); // SJIS
|
|
|
|
$s = mb_convert_encoding($euc_jp, 'JIS', 'EUC-JP');
|
|
print("JIS: ".base64_encode($s)."\n"); // JIS
|
|
|
|
// Using Encoding List Array
|
|
echo "== STRING ENCODING LIST ==\n";
|
|
|
|
$a = 'JIS,UTF-8,EUC-JP,SJIS';
|
|
$s = $jis;
|
|
$s = bin2hex(mb_convert_encoding($s, 'EUC-JP', $a));
|
|
print("EUC-JP: $s\n"); // EUC-JP
|
|
|
|
$s = $euc_jp;
|
|
$s = mb_convert_encoding($s, 'SJIS', $a);
|
|
print("SJIS: ".base64_encode($s)."\n"); // SJIS
|
|
|
|
$s = $euc_jp;
|
|
$s = mb_convert_encoding($s, 'JIS', $a);
|
|
print("JIS: ".base64_encode($s)."\n"); // JIS
|
|
|
|
// Using Encoding List Array
|
|
echo "== ARRAY ENCODING LIST ==\n";
|
|
|
|
$a = ['JIS', 'UTF-8', 'EUC-JP', 'SJIS'];
|
|
$s = $jis;
|
|
$s = bin2hex(mb_convert_encoding($s, 'EUC-JP', $a));
|
|
print("EUC-JP: $s\n"); // EUC-JP
|
|
|
|
$s = $euc_jp;
|
|
$s = mb_convert_encoding($s, 'SJIS', $a);
|
|
print("SJIS: ".base64_encode($s)."\n"); // SJIS
|
|
|
|
$s = $euc_jp;
|
|
$s = mb_convert_encoding($s, 'JIS', $a);
|
|
print("JIS: ".base64_encode($s)."\n"); // JIS
|
|
|
|
// Regression test for bug #81676
|
|
echo "UTF-8: " . mb_convert_encoding('test', 'UTF-8', mb_list_encodings()), "\n";
|
|
|
|
// Using Detect Order
|
|
echo "== DETECT ORDER ==\n";
|
|
|
|
$s = $jis;
|
|
$s = bin2hex(mb_convert_encoding($s, 'EUC-JP', 'auto'));
|
|
print("EUC-JP: $s\n"); // EUC-JP
|
|
|
|
$s = $euc_jp;
|
|
$s = mb_convert_encoding($s, 'SJIS', 'auto');
|
|
print("SJIS: ".base64_encode($s)."\n"); // SJIS
|
|
|
|
$s = $euc_jp;
|
|
$s = mb_convert_encoding($s, 'JIS', 'auto');
|
|
print("JIS: ".base64_encode($s)."\n"); // JIS
|
|
|
|
|
|
// Invalid Parameters
|
|
echo "== INVALID PARAMETER ==\n";
|
|
|
|
$s = mb_convert_encoding(1234, 'EUC-JP');
|
|
print("INT: $s\n");
|
|
|
|
$s = mb_convert_encoding('', 'EUC-JP');
|
|
print("EUC-JP: $s\n"); // SJIS
|
|
|
|
$s = $euc_jp;
|
|
try {
|
|
var_dump(mb_convert_encoding($s, 'BAD'));
|
|
} catch (\ValueError $e) {
|
|
echo $e->getMessage() . \PHP_EOL;
|
|
}
|
|
|
|
?>
|
|
--EXPECT--
|
|
== BASIC TEST ==
|
|
EUC-JP: c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
|
|
EUC-JP: c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
|
|
SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==
|
|
JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
|
|
== STRING ENCODING LIST ==
|
|
EUC-JP: c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
|
|
SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==
|
|
JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
|
|
== ARRAY ENCODING LIST ==
|
|
EUC-JP: c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
|
|
SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==
|
|
JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
|
|
UTF-8: test
|
|
== DETECT ORDER ==
|
|
EUC-JP: c6fccbdcb8eca5c6a5ada5b9a5c8a4c7a4b9a1a33031323334a3b5a3b6a3b7a3b8a3b9a1a3
|
|
SJIS: k/qWe4zqg2WDTINYg2eCxYK3gUIwMTIzNIJUglWCVoJXgliBQg==
|
|
JIS: GyRCRnxLXDhsJUYlLSU5JUgkRyQ5ISMbKEIwMTIzNBskQiM1IzYjNyM4IzkhIxsoQg==
|
|
== INVALID PARAMETER ==
|
|
INT: 1234
|
|
EUC-JP:
|
|
mb_convert_encoding(): Argument #2 ($to_encoding) must be a valid encoding, "BAD" given
|