PHP Japanese Echo String wird zu Fragezeichen

Ich arbeite an einer PHP-Site, die sowohl Japanisch als auch Englisch benötigt. In den meisten Fällen kann ich Japanisch problemlos anzeigen, aber ich kann die Zeichen nicht anzeigen, wenn ich eine Funktion wie die folgende verwende:

echo.php:

<code><?php
function draw(){
echo "日本語";
}
draw();
?>
</code>

Ich bekomme "日本語"

aber wenn ich das versuche: index.php:

<code><?php
 some stuff
 include "echo.php";
 draw();
?>
</code>

Ich bekomme "???". Kann ich meine Echo-Datei dazu bringen, die Daten so an die erste Datei zu senden, dass sie gelesen werden können?

BEARBEITEN: Die Website funktioniert und zeigt japanische Zeichen korrekt an, außer wenn versucht wird, eine Funktion aus einer PHP-Datei abzurufen. Hier der Code:

<code><html lang="ja">
<head>  
<title>Running Projects</title>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body>
<div id="header">
<? php include "layout.php" ?>
</div>
</body>
</html>
</code>

Wo layout.php nur eine Datei mit einer Liste von Links ist, habe ich dies auf jeder Seite, so dass die Links auf jeder Seite sind. Für einen anderen Teil muss ich functions.php verwenden, um Daten aus einer Datenbank abzurufen und auf die Seite zu schreiben. Deshalb habe ich versucht, layout.php in die functions.php zu schreiben und aufzurufen: Die englischen Links erschienen, aber die Japanische Links wurden als Fragezeichen angezeigt.

 deceze04. Apr. 2012, 09:28
Dies sollte gut funktionieren. Wie sehen Sie das Ergebnis?

Antworten auf die Frage(7)

müssen Sie auch den Zeichensatz in der MSSQL-Verbindungszeichenfolge angeben.

So was:

<code>$connectionInfo = array("Database"=>"db name", "UID"=>"username", "PWD"=>"pw","CharacterSet" => "UTF-8");
$serverName = "server";
$conn = sqlsrv_connect($serverName, $connectionInfo);
</code>

Bitte beachten Sie, dass Sie die oben vorgeschlagenen Schritte ausführen müssen, um Ihren HTML-Zeichensatz wie in HTML 5 zu deklarieren:

<code><meta charset="utf-8" />
</code>

PHP-Zeichensatz wie folgt:

<code>header('content-type: text/html; charset=utf-8');
</code>

wandle die Kodierung von "echo.php" in EUC-JP oder SHIFT-JIS um.

<code><?php
function draw(){
echo mb_convert_encoding("日本語", 'UTF-8', array('EUC-JP', 'SHIFT-JIS', 'AUTO'));
}
draw();
?>
</code>

Das funktioniert bei mir :)

Lösung für das Problem

Website auf UTF-8 setzen.

<code><meta http-equiv="content-type" content="text/html; charset=UTF-8">
</code>

In HTML5 sollten Sie verwenden:

<code><meta charset="utf-8" /> 
</code>

oder in php

<code>header('content-type: text/html; charset=utf-8');
</code>
 René Höhle04. Apr. 2012, 13:46
Überprüfen Sie dann die Dateicodierung und ändern Sie sie in UTF-8
 René Höhle04. Apr. 2012, 14:33
Vielleicht versuchen Sie "echo utf8_encode (" 日本語 ");"
 deceze05. Apr. 2012, 01:53
@Steinigutf8_encode konvertiert von Latin-1 bis UTF-8. Die Zeichenfolge "日本語" kann nicht in Latin-1 codiert werden. Daherutf8_encode nützt nichts.
 Asitaka04. Apr. 2012, 12:52
Meine Seite hat bereits dieses Tag, die japanischen Zeichen funktionieren, wenn sie aus <? Php include layout.php?> Gezeichnet werden. Sie funktionieren nicht, wenn sie aus einer Funktion <? Php include layout.php gezeichnet werden. draw ()?>

Versuchen Sie hinzuzufügen ..

mysqli_set_charset("utf8");

.. nach dem Herstellen einer Verbindung zu Ihrer Datenbank. Funktioniert immer für mich!

 Asitaka01. Juni 2014, 23:30
Dies wäre wichtig, wenn ich Probleme mit der Datenbank hätte, aber Probleme beim Übertragen von Japanisch zwischen PHP-Klassen.
Das passiert wenncharset ist nicht definiert oder falsch.

um die Zeichensätze zu definieren. Platzieren Sie die folgenden Meta-Tags nach Bedarf im Kopfbereich der Seite, damit sie korrekt gerendert werden.

HTML 4

<code><meta http-equiv="content-type" content="text/html; charset=UTF-8">
</code>

HTML 5

<code><meta charset="utf-8" />
</code>

Fügen Sie unten Meta-Tags zum Header hinzu

<code><meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
&,lt;meta http-equiv="Content-Language" content="ja" />
</code>

Zeichenkodierung. Versuchen Sie Folgendes zu überprüfen:

Alle Ihre Zeichenfolgen in allen PHP-Skripten sind Unicode (UTF-8 ist eine sehr häufige Wahl). Benutzenutf8_encode() und / oderutf8_decode() UTF-8 auf Ihre Saiten zu zwingen, wo nötig.Ihr Server sendet PHP-Ausgaben als Unicode (UTF-8 und vorzugsweise, aber nicht unbedingt, gzippte Daten)Ihr Browser versteht und akzeptiert Unicode (UTF-8). Normalerweise würde der Browser sendenAccept-Charset: UTF-8,*;q=0.5 in demGET Bitte um Hinweis auf die Unicode-Fähigkeit.

Schließlich habe ich Ihren Code mit PHP Version 5.3.6 und Firefox, Chrome und IE 9 überprüft. Firefox und Chrome drucken die japanischen Zeichen wie erwartet. Es ist nur IE 9, der es nicht richtig druckt. Beschnüffelt dieGET Anfrage vom IE verrät, es wird ja keine gesendetAccept-Charset: UTF-8,*;q=0.5. Ich bin nicht ganz sicher, wie ich den IE zum Senden zwingen soll, da in meinem Fall mein Server (Apache) zusammen mit PHP definitiv UTF-8-Zeichenketten zurücksendete.

Noch ein Hinweis - Sie können versuchen, Ihre Zeichenfolgen in zu konvertierenHTML-Entitäten. Zum Beispiel -echo "&#x00A9;"; würde drucken©. Ich bin mir jedoch nicht hundertprozentig sicher, wie ich alle Zeichenfolgen mit PHP in HTML-Entitäten konvertieren kann. Ich habe es erfolglos versuchthtmlentities() undhtmlspecialchars(). Aber für den IE hat sich nichts geändert.

 Asitaka04. Apr. 2012, 13:59
Sie haben Recht, ich hatte Probleme mit den HTML-Entitäten, einige, wie die Zeichenfolge durcheinander gebracht wurde, als ich nur den Text wiederholte, funktioniert es, aber in einer HTML-Zeichenfolge funktioniert es
 deceze05. Apr. 2012, 01:51
Sie können UTF-8 nicht mit "erzwingen"utf8_encode. Ein String ist entweder UTF-8-codiert oder in einer anderen Codierung. Wenn letzteres möglich istKonvertieren es von dieser Codierung nach UTF-8.utf8_encode konvertiert von Latin-1 bis UTF-8. Sie können den Text "日本語" in Latin-1 nicht darstellen. Soutf8_encode ist hier sinnlos, wie es so ziemlich immer ist.

Ihre Antwort auf die Frage