Cadena PHP / MSSQL a HEX

Cadena PHP / MSSQL a HEX

Después de 5 horas de intentar que funcionara, decidí pedir ayuda. Mi problema es que PHP convierte la cadena diferente a hexadecimal que MSSQL.

CADENA

đžćčšđđ

PHP

bin2hex($datos) // C491C5BEC487C48DC5A1C491C491

MSSQL

CAST('đžćčšđđ' como varbinary) // F09EE6E89AF0F0

El resultado de PHP debe ser como MSSQL. ¿Qué puedo hacer ante un problema resuelto?

EDITAR 1

Casi conseguí que funcionara correctamente, todavía 2 caracteres están mal

$unpacked = unpack('H*hex', mb_convert_encoding($data,'ISO-8859-2')); // F0BEE6E8B9F0F0
Mostrar la mejor respuesta

Esas son dos cadenas codificadas de manera diferente. La cadena de PHP parece UTF-8 y la cadena de MSSQL es una codificación de un solo byte, probablemente algo así como ISO8859, o una variante de Microsoft.

Cuando configuro en la base de datos čćžđš, se selecciona bien, pero no puedo hacer que la inserción funcione.

Si necesita usar MSSQL cast como varbinary, le recomiendo que lo haga.

Aquí está el ejemplo de PDO:

$conn = new PDO("sqlsrv:Server=$myServer;Database=$myDB", $myUser, $myPass);
$stmt = $conn->prepare('SELECT CAST(? as varbinary)');
$stmt->execute(array($lastname));
$result = $stmt->fetchAll();
foreach ($result as $row) 
{
  // Note your result set will return example one row with one column in it
}

Incluso si no está utilizando PDO, esto debería darle una idea general.

Gracias por su RESPUESTA, ya uso PDO y mi consulta de inserción se ve como INSERTAR EN TICKETS (id, ID de remitente, mensaje, remitente, estado) VALORES (CAST (0x3239 como char (2)), CAST (0x31 como char (1)) ,CAST(0x74657374 como carácter(4)),1,CAST(0x30 como carácter(1)))

Después de 10 horas de intentar que funcionara bien, ¡finalmente lo hice! Publicar solución si alguien tiene un problema similar.

public function FixCroatianChars($data)
{
     $unpacked = unpack('H*hex', mb_convert_encoding($data, 'HTML-ENTITIES'));
     return 'CAST(0x' . $unpacked['hex'] . ' as char(' . strlen($unpacked['hex']) / 2 . '))';
}

Tal vez en versiones más recientes de SQL Server, las entidades HTML se pueden convertir de forma nativa (sin recurrir a alguna función de decodificación XML oscura), tal como están las entidades HTML no pueden ser decodificadas por SQL Server. Dicho esto, bien pensado con la detección dinámica de longitud.