PHP включает проблему кодировки html-страницы - PullRequest
4 голосов
/ 02 июля 2010

после запроса базы данных mysql с использованием приведенного ниже кода я сгенерировал html-файл:

    $myFile = "page.htm";

$ fh = fopen ($ myFile, 'w') или die ("не удается открыть файл"); fwrite ($ fh, $ row ['text']); fclose ($ ФХ);

В базе данных msql кодируется с использованием utf8_general_ci. Но мне нужно включить его в веб-страницу php, как показано ниже:

 <?include('page.htm');?>

с учетом того, что веб-страница php использует в заголовке кодировку utf8:

<meta http-equiv="content-type" content="text/html; charset=utf8" />

Теперь, если я напишу на БД несколько букв с серьезным акцентом (è à ì) или символом кавычки и открою непосредственно page.htm, а на БД я вижу, что все выглядит нормально, но когда я смотрю на php На странице я вижу знак вопроса вместо тех, которые я изначально хотел. Зачем?! Заранее спасибо!

Ответы [ 7 ]

6 голосов
/ 02 июля 2010

META charset не всегда решает проблему.Убедитесь, что в вашей среде IDE сохранены настоящие файлы UTF-8.Например, в Dreamweaver нажмите CTRL-J, затем выберите Параметры названия / кодировки.

6 голосов
/ 02 июля 2010

Проблема в том, что кодировка html-страницы фактически задается заголовком ответа http 'Content-Type', чтобы исправить то, что вам нужно сделать, это добавить следующее в ваш PHP-файл перед любым выводом (т.е. вверху).

<?php
header('Content-Type: text/html; charset=utf8');

Чтобы уточнить, что должно быть в PHP, содержащем ваш HTML-файл, не в HTML-файле, который вы включаете:)

боковая точка (s):

  1. Рекомендуется использовать полный открывающий тег
2 голосов
/ 27 октября 2011

Если вы получаете данные из базы данных, и она неявным образом меняет кодировку, обратите внимание, что в Php фактическая кодировка соединения с базой данных должна быть явно установлена ​​на utf8 (если это то, что вы используете), в противном случае контент преобразуетсяпередается, даже если содержимое самой базы данных имеет правильный формат ... интересная причуда;)

Примерно так: mysql_select_db ($ database, $ connect);mysql_set_charset ('utf8', $ connect);// установить кодировку соединения.

2 голосов
/ 02 июля 2010

Я решил добавить это header('Content-Type: text/html; charset=iso-8859-1'); на веб-странице php с помощью include.Я не знаю, почему это работает.Я никогда не использовал iso-8859-1 charset.В любом случае, спасибо!

1 голос
/ 02 июля 2010

Возможно, проблема в неправильной кодировке, установленной в базе данных mySQL, или в подключении к базе данных.

Если все ваши таблицы на 100% utf8_general_ci, попробуйте выполнить mysql_query("SET NAMES utf8;"); перед выполнением любых запросов: это установит соединение в UTF-8.

0 голосов
/ 07 октября 2013

Try отдельный включает в себя блоки. Ex mainpage.php:

<?php
 include("php1.php");
?>

<?php
 include("php2.php");
?>enter code here
0 голосов
/ 08 сентября 2013

Одна точка о вашем коде:

когда вы используете include, это php-код, поэтому вы должны включить php-файл, а не htm-файл:

<?include('page.php');?>

попробуйте изменить расширение, я не знаю, как ваш код работал до сих пор:)

...