テキストをUTF8としてDBに保存しています。
投稿が JS 経由で API に送信されると、ö などの記号が「ö」として返されます。
私のウェブサイトのhtmlは次のように宣言されています
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
私の API 出力は、次のように utf-8 を宣言するヘッダーとともに送信されます。
$status_header = 'HTTP/1.1 '.$status.' '.self::getStatusCodeMessage($status);
header($status_header);
header('Content-type: ' . $content_type.'; charset=utf-8');
if ($body !== '') {
echo $body;
これを回避する唯一の方法は、出力で PHP を使用してこれを行うことです。
private static function fixText($text) {
$replaceChars = array(
"“" => "\"",
'•' => '·',
"â€" => "\"",
"’" => "'",
'ö' => 'ö',
'â€' => "'",
"é" => "é",
"ë" => "ë",
"£" => "£"
);
foreach($replaceChars as $oldChar => $newChar) {
$text = str_replace($oldChar, $newChar, $text);
}
$text = iconv("UTF-8", "UTF-8//IGNORE", $text);
return $text;
}
マップにシンボルをどんどん追加しなければならないので、明らかにこれは理想的ではありません。
アップデート:
ある開発者がこっそりと次のコードを追加しました。
$document->text = mb_convert_encoding($document->text, mb_detect_encoding($document->text), "cp1252");
破損した古いラテン文字を克服する方法として。