Mirá, una vez me pasó algo así con una aplicación de DOS, entonces cargaba dos Array, en uno las ocurrencias(acentos y caracteres de DOS) y en el otro los reemplazos, de manera de que cuando aparezca un caracter raro automaticamente lo reemplazaba por el que debia, pero tendrás que ver despues desde PHP como te queda. Probá con un solo registro.
la rutina es algo así, está echa en VB pero en Delphi es mas sencillo el tema de Arrays
Public Function Ansi2Unicode(sString As String)
Dim vArray1, vArray2
Dim nI As Integer
vArray1 = Array(" ", "‚", "¡", "¢", "£", "¤", "¥", "§", "¨", "*", "?", "š")
vArray2 = Array("á", "é", "í", "ó", "ú", "ñ", "Ñ", "º", "¿", "¡", "ü", "Ü")
For nI = 0 To UBound(vArray1)
If InStr(1, sString, vArray1(nI)) <> 0 Then // lo busca en Dephi Pos()
sString = Replace(sString, vArray1(nI), vArray2(nI)) // En Delphi AnsiReplaceString
End If
Next
Ansi2Unicode = sString
End Function
Código:
Delphi:
var
i:Integer;
Const
aArray1: Array[0..4] Of String = ( 'á', 'é', 'í', 'ó', 'ú' );
aArray2: Array[0..4] Of String = ( 'á', 'é', 'í', 'ó', 'ú' );
Begin
for i := 0 To High( aArray1 ) do
Espero te sirva de algo sino despues veo alguna otra solucion