$_POST leer auf utf-8-Zeichen
Ich arbeite an einer mehrsprachigen Website mit CodeIgniter. Es ist eine form, Beiträge, Daten-controller, aber $_POST
leer ist, wenn ich die Anwendung starten türkischen Zeichen wie öçüÜĞ
etc.
Habe ich den Zeichensatz:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Form:
<form action="translations/save" method="post" accept-charset="utf-8">
<textarea rows="6" cols="60" id="editor_tr" name="editor_tr">Türkçe</textarea>
</form>
$_POST
und $this->input->post('editor_tr')
gibt leerer, aber ich kann sehen, dass die raw-post mit file_get_contents("php://input")
.
Dieser arbeitet OK in einem normalen PHP-test, aber nicht die Arbeit mit CodeIgniter. Vielleicht meinen .htaccess-Datei das Problem verursacht, aber keine Ahnung.
Jede Hilfe wird sehr geschätzt.
UPDATE:
Hier ist die Ausgabe für var_dump wie gewünscht.
var_dump($_POST)
- Ohne türkische chars
array(3) { ["id"]=> string(12) "news8titleID" ["editor_tr"]=> string(13) "turkish value" ["editor_en"]=> string(13) "english value" }
var_dump($_POST)
- Mit türkischen chars (Die Eingabe war: Türkçe karakter
, aber es nicht zeigen, bis in der $_POST)
array(3) { ["id"]=> string(12) "news8titleID" ["editor_tr"]=> string(0) "" ["editor_en"]=> string(13) "english value" }
UPDATE 2:
Beim Debuggen habe ich herausgefunden, dass system.core.Input
Klasse reinigt die input-Daten auf _clean_input_data
Funktion.
//Clean UTF-8 if supported
if (UTF8_ENABLED === TRUE)
{
$str = $this->uni->clean_string($str);
}
So, bevor die $_POST
erreicht hat, um meinen controller, der editor_tr
Wert ist bereits gereinigt durch system.core.Utf8
Klasse in dieser Funktion:
function clean_string($str)
{
if ($this->_is_ascii($str) === FALSE)
{
$str = @iconv('UTF-8', 'UTF-8//IGNORE', $str);
}
return $str;
}
- haben Sie versucht, mbstring? und die damit verbundene Fehlerbehebung für codeigniter
My .htaccess file perhaps is causing the issue, but dunno.
Überlegen, liefert es dann ?- Sorry, das war ein Tippfehler.
- Implementiert habe ich mbstring zu meinem codeigniter, nach Ihrem Kommentar, aber noch kein Glück. Es ignoriert das element in der $_POST, wenn es utf-8-chars.
- Hier ist meine .htaccess-Datei:
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L]
- Was ist Ihre Ausgabe mit
var_dump($_POST)
beim senden des stringabc
, und dann beim senden des stringTürkçe
? Wenn Sie fügen Sie es zu der Frage, es wird helfen. Ich bin irgendwie interessiert, aber ich vermute auch, es kann ein simpler Fehler auf Ihrem Teil, und das hat nichts zu tun mit Codeigniter. Ich bin auch zu 99,9% sicher, dass .htaccess hat damit nichts zu tun. In Zukunft stellen Sie sicher, dass Sie alle relevanten Informationen zu Ihrer Frage der Inhalte und nicht in einem Kommentar. - Vielen Dank für das feedback und in diesen suchen. Ich bearbeitet meine post und enthalten die
var_dump
Ausgang für beide. - Fügen Sie bitte welche version von Codeigniter Sie verwenden als gut. (1.7.2, 2.0.1, 2.0.2, etc) Wenn Sie nicht sicher sind, drucken Sie einfach die Konstante
CI_VERSION
. Und bitte bestätigen: Sie habenapplication/config/config.php
charset als UTF-8, richtig? - Ich bin mit CI 2.0, ja, das ist richtig. Ich UTF-8 verwende in meiner config-Datei:
$config['charset'] = 'UTF-8';
- OK, versuchen Sie eine weitere test bitte: Versuchen Sie, einige dieser Zeichen
♥ ™ ⅓ “ ”
und wir werden sehen, ob es ein UTF-8-Problem oder ein problem mit betonten türkische Zeichen nur. Es ist eine lange gedreht, aber ich bin fast die Ideen aus. - Er wusste nicht, wie diese Zeichen entweder. Ich bearbeitet meine post oben für mehr info.
- Wo sind die Zeichen in der URL her? Sind Sie mit der Eingabe direkt in den browser? Hat CI global "Zeichensatz" - Einstellung und wie ist es eingestellt?
- Ich habe ein Formular und 2 Texteingabefelder innen. Diese Zeichen werden kommen, wenn der Benutzer das Formular sendet. Die Globale Zeichensatz sollte utf-8.
- Und das Formular ist in eine UTF-8 codierte Seite? Der browser zeigt "UTF-8" in das Menü Codierung? Sie haben versucht, entfernen Sie die voreingestellten Standard-und Eingabe
Türkçe
von hand? - Wollen einfach nur, um zu bestätigen, dass ich immer das gleiche Problem in CI 2.0.2 sowie 2.0.1 auch nach manuell "deaktivieren" die UTF8-system-Bibliothek. Wenn ich behaupte HelloöçüÜĞ, nur Hallo gesendet wird.
- Ja, zeigt der browser UTF-8 und ich die chars von ahnd, aber noch kein Glück. @Madmartigan Nicht sicher, ob das CI-bug, ich habe kein problem mit der Anzeige UTF-8, aber mit der Eingabe.
- Ich denke, es ist in der Tat eine CI-bug, ich habe nur versucht, diese mit frischen Standard-Installationen von 1.7.2 und 2.0 und hatte unterschiedliche Ergebnisse. Ich habe auch
var_dump($_POST)
in der Eingabe-Klasse-Konstruktor (v2.0.2) und war in der Lage, um zu sehen, all die richtigen Zeichen. Dies hat nun verbraucht meine Aufmerksamkeit, und ich möchte, um herauszufinden, was die Ursache für dieses ist, weil es Auswirkungen auf meine Arbeit als gut. - Vielen Dank für diese wertvolle Informationen und die Zeit, die Sie verbrachte auf dieser. Da bin ich immer noch in der Entwicklungsphase, ich wird ein upgrade auf 2.0.2 und testen was passiert.
- Sehr seltsame Nachricht: ich re-checked Versionen 1.7.2 bis 2.0.2 (insgesamt 5 Versionen, Standard-Installation) und jetzt habe ich nicht reproduzieren Sie das problem, obwohl ich konnte, bevor Sie vor wenigen Augenblicken! Noch seltsamer: ich habe versucht, wieder dieselben Zeichen in deinem Beispiel in meinem CMS läuft 2.0.2 und nun plötzlich, Sie funktionieren! Ich habe nichts ändern. Sehr verwirrt und neugierig auf dieses Problem, vielleicht ist es nicht CI verwandt?
- Noch eins: Stellen Sie sicher, dass Sie das nicht jegliche Prüfung oder prepping Regeln auf dem Gebiet. Dinge wie
url_title()
Streifen diese Zeichen. - Ich führe nicht alle Validierungsregeln. Ich werde versuchen, um zu testen auf einer frischen Installation und hier ein feedback geben.
- Es scheint spezifisch für CI läuft in PHP 5.3.x auf MAMP. Es tritt nicht in MAMP PHP 5.2.17, noch ist es ein problem auf meinem CentOS LAMP-server mit PHP 5.3.8. Ich würde gerne wissen, welchen Unterschied die Ursache für das problem in MAMP.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da die Kommentare sich häufen und wird wohl übersehen, ich werde nach ein paar mehr Vorschläge.
Leser, bitte Bedenken Sie, dies ist der Umgang mit den $_POST-Daten-Werte und nicht die Anzeige von Daten auf einer web-Seite.
Dieser user scheint ein ähnliches problem:
Codeigniter scheint zu brechen, $_POST des ' £ ' - Zeichen (Raute)
Gibt es einen Bericht hier auf Bitbucket ähnlich:
https://bitbucket.org/ellislab/codeigniter-reactor/issue/214/problem-when-inserting-special-characters:link Entfernt: EllisLabs geschlossen hat das repo für die öffentlichkeit
Vielleicht hinzufügen dieses zu Ihrem index.php hilft (vermutlich nicht):
ini_set('default_charset', 'UTF-8');
Überprüfen und stellen Sie sicher, dass Sie das nicht jegliche Prüfung oder prepping Regeln auf dem Gebiet. Dinge wie
url_title()
Streifen diese Zeichen.Stellen Sie sicher, dass das form-tag hat accept-charset:
Dann in den controller verwenden, utf8_decode (), wenn das beziehen der gebuchten Werte:
Wenn Sie nicht möchten, verwenden Sie eine ältere PHP-version in Ihrem MAMP-Installation, die Sie verwenden können:
Daten zu erhalten, anstatt
$_POST
$_REQUEST
ist ein assoziatives array, das standardmäßig enthält die Inhalte$_GET
,$_POST
und$_COOKIE
.Mehr info: http://php.net/manual/en/reserved.variables.request.php
Und gibt alle Daten, die für einige Grund
$_POST
bricht !Dies ist nicht eine Antwort, aber möchten Sie vielleicht werfen Sie einen Blick und sehen, wie alles kommt.
dann versuchen mit CI ' s post