[英]Why does my output change?
我正在使用PHP中的UTF-8編碼,因此我一直在設法獲取所需的輸出。 然后,在代碼未發生任何變化的情況下,輸出突然發生了變化。
以前我得到希伯來語輸出。 現在我得到“ &&&&&”。
任何想法可能是什么原因造成的?
這些是最常見的問題:
您可以嘗試的幾件事:
配置編輯器
確保您的文本編輯器,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的輸出中的Collation值來檢查其編碼(在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.