簡體   English   中英

為什么我的輸出會改變?

[英]Why does my output change?

我正在使用PHP中的UTF-8編碼,因此我一直在設法獲取所需的輸出。 然后,在代碼未發生任何變化的情況下,輸出突然發生了變化。

以前我得到希伯來語輸出。 現在我得到“ &&&&&”。

任何想法可能是什么原因造成的?

這些是最常見的問題:

  • 您要在其中創建PHP / HTML文件的編輯器
  • 您正在通過其瀏覽站點的Web瀏覽器
  • 您的PHP Web應用程序在Web服務器上運行
  • MySQL數據庫
  • 您正在從中讀取/寫入數據的其他任何外部位置(內存緩存,API,RSS提要等)

您可以嘗試的幾件事:

配置編輯器

確保您的文本編輯器,IDE或任何您編寫PHP代碼的文件將文件保存為UTF-8格式。 您的FTP客戶端,Scp,SFTP客戶端不需要任何特殊的UTF-8設置。

確保網絡瀏覽器知道使用UTF-8

為確保用戶的瀏覽器都知道將所有數據讀/寫為UTF-8,可以在兩個位置進行設置。

內容類型標簽

確保內容類型META標頭將UTF-8指定為字符集,如下所示:

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">

HTTP響應頭

確保Content-Type響應標頭也將UTF-8指定為字符集,如下所示:

ini_set('default_charset', 'utf-8')

配置MySQL連接

現在您知道從用戶那里收到的所有數據都是UTF-8格式的,我們需要配置PHP和MySQL數據庫之間的客戶端連接。 有一種通用的方式,只需執行MySQL查詢即可:

SET NAMES utf8;

…根據您使用的是哪個客戶端/驅動程序,可以使用輔助函數來更輕松地執行此操作:

內置mysql功能

mysql_set_charset('utf8', $link);

使用MySQLi

$mysqli->set_charset("utf8")

*使用PDO_MySQL(連接時)*

$pdo = new PDO( 
    'mysql:host=hostname;dbname=defaultDbName', 
    'username', 
    'password', 
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") 
);

MySQL數據庫

現在我們已經差不多了,您只需要確保MySQL知道將數據以UTF-8格式存儲在表中即可。 您可以通過查看SHOW TABLE STATUS的輸出中的Collat​​ion值來檢查其編碼(在phpmyadmin中,這在表列表中顯示)。 如果您的表尚未位於UTF-8中(很可能它們位於latin1中),則需要通過為每個表運行以下命令來對其進行轉換:

ALTER TABLE myTable CHARACTER SET utf8 COLLATE utf8_general_ci;

最后一件事需要提防

現在完成所有這些步驟,您的應用程序應該沒有任何字符集問題。 需要注意的是,大多數PHP字符串函數都不支持Unicode,因此例如,如果對多字節字符運行strlen(),它將返回輸入中的字節數,而不是輸入的字節數。字符。 您可以使用Multibyte String PHP擴展來解決此問題,盡管這些字節/字符問題引起問題的情況並不常見。

此處采用表格: http//webmonkeyuk.wordpress.com/2011/04/23/how-to-avoid-character-encoding-problems-in-php/

像這樣設置header后嘗試使用內容類型

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

試試這個功能->

$html = "Bla Bla Bla...";
$html = mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8");

更多信息-http://php.net/manual/zh/function.mb-convert-encoding.php

我將這種方法放在一起,並在我正在使用的文件中對其進行了調用,這似乎可以解決問題。

function setutf_8()
    {
    header('content-type: text/html; charset: utf-8');
    mb_internal_encoding('UTF-8');
    mb_http_output('UTF-8');
    mb_http_input('UTF-8');
    mb_language('uni');
    mb_regex_encoding('UTF-8');
    ob_start('mb_output_handler');
    }

謝謝你的幫助! :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM