@@ -218,16 +218,34 @@ static void php_intl_idn_to(INTERNAL_FUNCTION_PARAMETERS,
218
218
}
219
219
RETURN_FALSE ;
220
220
} else {
221
- UParseError parse_error ;
222
221
UChar converted [MAXPATHLEN ];
223
222
int32_t converted_ret_len ;
224
223
225
224
status = U_ZERO_ERROR ;
225
+
226
+ #if U_ICU_VERSION_MAJOR_NUM >= 55
227
+ UIDNAInfo info = UIDNA_INFO_INITIALIZER ;
228
+ UIDNA * idna = uidna_openUTS46 ((int32_t )option , & status );
229
+
230
+ if (U_FAILURE (status )) {
231
+ intl_error_set ( NULL , status , "idn_to_ascii: failed to create an UIDNA instance" , 0 );
232
+ RETURN_FALSE ;
233
+ }
234
+
235
+ if (mode == INTL_IDN_TO_ASCII ) {
236
+ converted_ret_len = uidna_nameToASCII (idna , ustring , ustring_len , converted , MAXPATHLEN , & info , & status );
237
+ } else {
238
+ converted_ret_len = uidna_nameToUnicode (idna , ustring , ustring_len , converted , MAXPATHLEN , & info , & status );
239
+ }
240
+ uidna_close (idna );
241
+ #else
242
+ UParseError parse_error ;
226
243
if (mode == INTL_IDN_TO_ASCII ) {
227
244
converted_ret_len = uidna_IDNToASCII (ustring , ustring_len , converted , MAXPATHLEN , (int32_t )option , & parse_error , & status );
228
245
} else {
229
246
converted_ret_len = uidna_IDNToUnicode (ustring , ustring_len , converted , MAXPATHLEN , (int32_t )option , & parse_error , & status );
230
247
}
248
+ #endif
231
249
efree (ustring );
232
250
233
251
if (U_FAILURE (status )) {
0 commit comments