ich einen PHP-Skript entwickelt, die zu einem allgegenwärtigen Datenbanksystem verbinden sollen:Wie setze ich die Codierung für pervasive Datenbank über ODBC in PHP?
$connection_string = "Driver={Pervasive ODBC Client Interface};ServerName=127.0.0.1;[email protected]";
$conn = odbc_connect($connection_string,"administrator","password");
Wenn ich eine Abfrage ausführen, die zurückgegebenen Daten ist nicht UTF8. mb_detect_encoding
sagt mir, die Codierung ist ASCII. Ich habe versucht, die Daten über zu konvertieren, aber es funktioniert nicht. Also habe ich so etwas versucht, um die Kodierung nach dem verbundenen Skript zu ändern:
odbc_exec($conn, "SET NAMES 'UTF8'");
odbc_exec($conn, "SET client_encoding='UTF-8'");
Aber nichts hilft! Kann mir jemand helfen? Vielen Dank.
------------------------------ bearbeiten --------------- ----------------
hier ist die komplette Skript, weil bisher nichts funktioniert:
class api {
function doRequest($Url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $Url);
curl_setopt($ch, CURLOPT_REFERER, "http://www.example.org/yay.htm");
curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_ENCODING, 'UTF-8');
$output = curl_exec($ch);
curl_close($ch);
}
}
$connection_string = "Driver={Pervasive ODBC Client Interface};ServerName=127.0.0.1;[email protected];Client_CSet=UTF-8;Server_CSet=UTF-8";
$conn = odbc_connect($connection_string,"administrator","xxx");
if ($conn) {
$sql = "SELECT field FROM table where primaryid = 102";
$cols = odbc_exec($conn, $sql);
while($row = odbc_fetch_array($cols)) {
$api = new api();
// --- 1 ---
$api->doRequest("http://example.de/api.html?value=" . @urlencode($row["field"]));
// --- 2 ---
$api->doRequest("http://example.de/api.html?value=" . $row["field"]);
// --- 3 ---
$api->doRequest("http://example.de/api.html?value=" . utf8_decode($row["field"]));
}
}
der Server-Log sagt der folgende Städte:
--- 1 --- [24/May/2016:14:05:07 +0200] "GET /api.html?value=Talstra%E1e+7++++++++++++++++++++++++++++++++++++++++++++++++ HTTP/1.1" 200 93 "http://www.example.org/yay.htm" "MozillaXYZ/1.0"
--- 2 --- [24/May/2016:11:31:10 +0200] "GET /api.html?value=Talstra\xe1e 7 HTTP/1.1" 200 83 "http://www.example.org/yay.htm" "MozillaXYZ/1.0"
--- 3 --- [24/May/2016:14:05:07 +0200] "GET /api.html?value=Talstra?e 7 HTTP/1.1" 200 93 "http://www.example.org/yay.htm" "MozillaXYZ/1.0"
% E1 steht für á, aber es sollte ß sein (deutsches Zeichen)
\ xe1 für einen Stand, aber es sollte ß (Deutsch Zeichen)
vielen dank! Schließlich habe ich folgendes geändert und es funktioniert: $ connection_string = "Treiber = {Pervasive ODBC-Client-Schnittstelle}; ServerName = 127.0.0.1; dbq = @ test; Client_CSet = UTF-8; Server_CSet = CP850"; und iconv ("CP850", "UTF-8", $ row ["Feld"]) –