private function cbString($m)
{
$sq = $m[0];
if (($fix56 = self::ESCAPE_SEQUENCES) && isset($fix56[$sq[1]])) {
// workaround for PHP 5.6
return self::ESCAPE_SEQUENCES[$sq[1]];
} elseif ($sq[1] === 'u' && strlen($sq) >= 6) {
$lead = hexdec(substr($sq, 2, 4));
$tail = hexdec(substr($sq, 8, 4));
$code = $tail ? 0x2400 + ($lead - 0xd800 << 10) + $tail : $lead;
if ($code >= 0xd800 && $code <= 0xdfff) {
$this->error("Invalid UTF-8 (lone surrogate) {$sq}");
}
return iconv('UTF-32BE', 'UTF-8//IGNORE', pack('N', $code));
} elseif ($sq[1] === 'x' && strlen($sq) === 4) {
return chr(hexdec(substr($sq, 2)));
} else {
$this->error("Invalid escaping sequence {$sq}");
}
}