PHP unified ODBC and PHP PDO ODBC do not support Unicode. Those PHP ODBC libraries are using ANSI ODBC APIs (SQLxxxA APIs) instead of the Unicode ODBC API (SQLxxxW APIs)"
More information available on https://www.progress.com/tutorials/odbc/unicode
The reason UTF-8 works with PHP when using Mysql (another type of database often used with PHP) is because MySQL does not use 'odbc_do' (unified ODBC PHP library) but for example 'mysqli_query' from a different PHP library (mysqli). There is also more than one PHP library available for connecting to MySQL, such a custom PHP extension does not exist for OpenEdge. (only the generic PHP unified ODBC and PHP PDO libraries can be used for OpenEdge ODBC connections from within PHP)
PHP unified ODBC and PHP PDO ODBC uses the SQL width value of a column to determine the maximum amount of characters it will show from that column and assume 1 byte per character which is not a correct assumption for non western characters such as Chinese characters as the unicode code point for each Chinese character cannot fit into a single byte (in the string 还还还还还还还还还还还还还还还还还还还还还还 3 bytes for each Chinese character is needed).
The reason the truncated string that was displayed through PHP:
only showed the first 13 chinese characters + 1 question mark character
13 Chinese characters * 3 bytes = 39 bytes
and the SQL width is set to 40 bytes.