Ich benutze Opencart, und obwohl ich grundsätzlich jeden Beitrag auf Google zu diesem Thema gesehen habe, kann ich nicht herausfinden, warum die Datenbank Buchstaben mit Akzenten in einer nicht utf8 Codierung speichert.PHP json_encode Codierung von Akzenten in Worten
print_r($this->request->post);
Rückkehr: Array ([pfa_status] => 1 [pfa_text] => 'Cobrança');
aber nach dem json_encode
aplying es wird:
{"pfa_status":"1","pfa_text":"Cobran\u00e7a"}
nun durch an allen möglichen Lösungen durch Web-Suche:
- Ich benutze
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
- I habe versucht
header('Content-type: text/plain; charset=utf-8');
- Alle meine Dateien haben das Format
utf-8 without BOM
- Ich benutze
$this->connection->set_charset("utf8");
- Ich benutze
$this->connection->query("SET NAMES 'UTF8'");
- Mein Feld in der Datenbank, wo die json gespeichert wird, hat die Sortierung
utf8_bin
- Wenn
json_decode
die Verwendung mit falsch bleibt Codierung json_encode($this->request->post, JSON_UNESCAPED_UNICODE);
Versuchte
So whene ver zeige ich den Wert von pfa_text
nach der Decodierung, es zeigt Cobran\u00e7a
anstelle von Cobrança
.
Was fehlt mir?
EDIT 1: Wie gewünscht, hier ist mein Code nur zum Zweck der Prüfung.
class ControllerPfa extends Controller
{
public function index()
{
if (($this->request->server['REQUEST_METHOD'] == 'POST'))
{
$value = json_encode($this->request->post, JSON_UNESCAPED_UNICODE);
print_r($value);
die();
}
}
}
So ist der Ausgang (und zu beachten, dass es die volle Strom $ ist _POST Antwort):
{"pfa_status":"1","pfa_sort_order":"","pfa":[{"payment_method":"cod","description":{"1":{"name":"Tax"},"3":{"name":"Cobran\u00e7a"},"4":{"name":"Cobran\u00e7a"}}}]}
EDIT 2: Ich bin mit der Version 7.0 von PHP
EDIT 3: Gelöst, ermöglicht die folgende Funktion das perfekte Einfügen der Wörter in die Datenbank mit Akzenten.
private function formatEncoding($value)
{
return preg_replace_callback('/\\\\u(\w{4})/', function ($matc)
{
return html_entity_decode('&#x' . $matc[1] . ';', ENT_COMPAT, 'UTF-8');
}, $value);
}
Also, alles, was wir tun müssen, ist formatEncoding(json_encode($this->request->post));
Deceze, es ist nicht dupliziert, wenn die Antworten in diesem Beitrag nicht w Ork für mich, findest du nicht? – Linesofcode
FWIW, dies ist in keiner aktuellen PHP-Version reproduzierbar: https://3v4l.org/6I1l4. Entweder ist etwas an der Eingabe nicht so, wie du denkst, oder du liegst irgendwie unerwartet auf einer alten PHP-Version. – deceze
Wie sieht es mit meinem Post aus? Ich poste sogar einen Print meiner aktuellen PHP-Version. – Linesofcode