конфликт кодировки: выход php поврежден html <head>контентом - PullRequest
0 голосов
/ 07 февраля 2012

Я новичок в PHP, HTML и MySQL, и столкнулся со следующей проблемой:

У меня есть документ PHP, который выводит результаты запроса MySQL.Поскольку база данных MySQL и, следовательно, выходные результаты содержат некоторые нестандартные символы (такие как æ или á), мой документ PHP и база данных / таблицы MySQL кодируются как utf-8.Например, вот пример записи базы данных и правильного вывода:goahteæjgáda

Когда в документе PHP ничего нет в узле HTML <head/> (даже в комментариях), тогда поиск успешен и вывод отображается правильно (но тогда я не могу применить свой внешний CSSили включите значок ярлыка и т.файлы значков, ключевые слова или даже просто <!-- comments -->, затем либо:

  1. поиск не работает, если искомая строка содержит нестандартный символИЛИ ЖЕ
  2. любые нестандартные символы в результирующем выводе отображаются как � - например, приведенный выше пример выглядит следующим образом после поиска «goahte»:goahte�jg�da

Любая помощь будет оценена!

Вот мой код:

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link href='style_mavsulasj.css' rel='stylesheet' type='text/css'/>
  <link rel='shortcut icon' href='farben4.gif'/>
  <title>search</title>
</head>
<body>

<div style="width:230px;padding:0px;margin:0px;float:left;">
<table border="0">
<tr><td>Search here:</td><td>
<?php if (strlen($_GET['smj'])==0) echo ""; else echo "current search"; ?>
</td></tr>
<form action="" method="GET">
<tr><td colspan="2">Entry:</td></tr>
<tr><td><input type='text' name='smj' value=''></input></td><td align='center'><?php echo "<span class='searchCrits' > ".$_GET['smj']."</span>"; ?></td></tr>
<tr><td colspan="2"><input type="submit" value="submit query"/></td></tr>
</form>
</table>
</div>

<div style="width:960px;padding:30px;margin-left:210px;">
<?php
if($_GET){
$smj = $_GET['smj'];
$connect = mysql_connect("localhost","root","root");
    if($connect){    
        $toDB = mysql_select_db("bigG_reimport_test",$connect);
        if($toDB){
            $query = "SELECT * FROM reimport_Sheet1 WHERE smj LIKE '" . $smj . "%'";
            $results = mysql_query($query);
            echo "<span class='header4'>results:<br/>";
            while($row = mysql_fetch_array($results)){
                echo "-> " . $row['smj'] . "<br/>" ;
                }
            echo "</span><br/>";
            } 
        else {die("Failed to connect to database!<br/>" . mysql_error());}}
        else {die("Failed to connect to mysql!<br/>" . mysql_error());}}
?>
</div>

</body>
</html>

1 Ответ

1 голос
/ 07 февраля 2012

Убедитесь, что:

  1. Ваш исходный файл PHP закодирован как UTF-8 (да, к сожалению, это действительно имеет значение)
  2. Вы установили кодировку в сеансе MySQLдо UTF-8.См. mysql_set_charset
  3. Вы установили кодировку UTF-8 в заголовках HTTP.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...