2009-04-21 2 views
0

하나의 테이블과 하나의 데이터베이스가 있으며, 다양한 의류에 대한 설명이있는 특정 필드가 있습니다. 이러한 설명에는 종종 움라우트 또는 유사한 문자가 포함됩니다.utf8 악센트 ​​부호가 일관 적으로 표시되지 않습니다.

두 개의 다른 PHP 필드에서이 필드를 가져 오는 중이며 데이터에 아무런 변화도 없지만 일관성없이 표시됩니다. I는 file1만을하는 전술 중 하나를 추가하는 경우

FILE1에서, 그것은 아래와 같이 올바르게 표시 또는

$con->query("SET NAMES 'utf8'"); 

header("Content-Type: text/html; charset=utf-8"); 

추가 할 데이터는 올바르게 표시되지 .

파일 2에서, 단지

$con->query("SET NAMES 'utf8'"); 

올바르게 설정되어있는 경우 표시된다.

중 하나 세트 이름 쿼리, 또는 세트 이름을 떠나와 노동 조합에

header("Content-Type: text/html; charset=utf-8"); 

가 잘못 표시하게됩니다 밖으로 쿼리 추가.

$con->set_charset("utf8"); 

는 아무런 차이가 없습니다.

이 문제는 Windows 및 Linux의 Internet Explorer 및 Firefox에서 발생합니다.

일관성 표시 데이터의 예 :

ED HARDY SCHUHE IM JAPAN-STYLE, GRÖßE 36 

을 File1 :

<?php 
header("Content-Type: text/html; charset=utf-8"); 
if (isset($_GET["pk"])) { 
    $pk = $_GET["pk"]; 
} 
$con = mysqli_connect("localhost","user","password", "database"); 
if (!$con) { 
    echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error(); 
    exit; 
} 
$con->query("SET NAMES 'utf8'"); 
$retreiveQuery = 'SELECT ARTICLE_NAME FROM AUCTIONS WHERE ARTICLE_NO = ?'; 
if ($getRecords = $con->prepare($retreiveQuery)) { 
    $getRecords->bind_param("s", $pk); 
    $getRecords->execute(); 
    $getRecords->bind_result($ARTICLE_NAME); 
    while ($getRecords->fetch()) { 
     echo "<h1>".$ARTICLE_NAME."</h1>"; 
    } 
} else { 
    print_r($con->error); 
} 

있는 File2 : I는 잭스 applicaition이

<?php 
header("Content-Type: text/html; charset=utf-8"); 
if (isset($_GET["brand"])) { 
    $brand = $_GET["brand"]; 
} 
$con = mysqli_connect("localhost","user","pass", "database"); 
if (!$con) { 
    echo "Can't connect to MySQL Server. Errorcode: %s\n". mysqli_connect_error(); 
    exit; 
} 
$con->query("SET NAMES 'utf8'"); 
$brand = '%' . $brand . '%'; 
$rows = getRowsByArticleSearch($brand); 
echo "<table border='0' width='100%'><tr>" . "\n"; 
foreach ($rows as $row) { 
    $pk = $row['ARTICLE_NO']; 
    echo '<tr id="article_' . $pk . '">' . "\n"; 
    echo '<td><a href="#" onclick="updateByPk(\'Layer2\', \'' . $pk . '\', \'' . $title . '\', \'' . $pg . '\')">'.$row['ARTICLE_NAME'].'</a></td>' . "\n"; 
    echo '</tr>' . "\n"; 
} 
echo "</table>\n"; 
function getRowsByArticleSearch($searchString) { 
    $con = mysqli_connect("localhost","user","pass", "db"); 
    $recordsQuery = "SELECT ARTICLE_NAME FROM AUCTIONS WHERE lower(ARTICLE_NAME) LIKE ? and SUBCAT='' LIMIT 0,20"; 
    if ($getRecords = $con->prepare($recordsQuery)) { 
     $getRecords->bind_param("s", $searchString); 
     $getRecords->execute(); 
     $getRecords->bind_result($ARTICLE_NAME); 
     $rows = array(); 
     while ($getRecords->fetch()) { 
      $row = array(
          'ARTICLE_NAME' => $ARTICLE_NAME, 
         ); 
      $rows[] = $row; 
     } 
     return $rows; 
    } else { 
     print_r($con->error); 
    } 
} 

을 index.php를 가진 대한 내가 설정 한 것

header("Content-Type: text/html; charset=utf-8"); 

그런 다음 잘못 표시된 데이터를 표시하는 file2를 사용하여 Ajax를 통해 콘텐츠가있는 레이어를로드합니다. 데이터는 file1을 사용하여 데이터를 다른 계층에로드하는 링크가되어 데이터를 올바르게 표시합니다.

불일치가 어디에서 오는지 실제로 이해할 수 없습니다.

편집 :

세트 이름과 정확하게 파일 1의 데이터 표시 및 헤더를 설정하고 페이지가 UTF-8로 보여줍니다.

파일 2는 웹 페이지 정보가 ISO-8859-1 인 문자 세트를 표시 할 때만 데이터를 올바르게 표시합니다. 이는 세트 이름을 생략하고 헤더를 설정한다는 것을 의미합니다.

+0

(내 생각은 file2.php 또는 index.php 파일가 다른 인코딩으로 저장되는 것)! 여기에서 확인하십시오 : http://stackoverflow.com/questions/346531/utf8-problem-with-mysql-5/346552#346552 – markus

답변

0

파일이 utf8 인코딩으로 저장되었는지 확인하고 다른 파일이 아닌지 확인하십시오. 이것은 아마도 IDE 또는 텍스트 편집기를 통해 수행 할 수 있습니다. 나는.일식에서 선택할 수있는 편집 -> 설정 인코딩

이이 전에 요청 된