2013-02-04 54 views
0

工作,我有一個問題。我需要找到我的文本文件和輸出他們一些UTF-8字符,但它好好嘗試一下輸出的字母,而不是輸出「?」,questionmarks ...使用UTF-8編碼的文本

ini_set('default_charset', 'UTF-8'); 
$homepage = file_get_contents('t1.txt'); 
echo $homepage; 
echo "\t"; 
echo "\t!!!!!!!!!!!!"; 
echo $homepage[14]; 

所以,在這裏它是非常奇怪的,如果我使用exsisting指數也沒什麼輸出,但如果我把

echo $homepage[35]; 

輸出「?」, 但我的$網頁字符串只有30 charecters長,有什麼不對?

這是非常奇怪的,它需要正確的字符串從文件,並正確輸出,但是當我呼籲通過索引字符,它不工作..這裏是什麼在我的文本文件: advhasgdvgv олыолоываи ouhh

,它正確地輸出它,當我剛剛打電話$主頁,但在$主頁[14]它不work.Here輸出:

advhasgdvgvолыолоываиouhh! !!!!!!!!!

+0

這不是因爲Unicode字符存儲在多個字節中,因此訪問像這樣的字符只會得到第一個字節? – Supericy

回答

0

嘗試mb_convert_encoding,看看是否能解決問題。

http://www.php.net/manual/en/function.mb-convert-encoding.php

string mb_convert_encoding (string $str , string $to_encoding [, mixed $from_encoding ])

$homepage = mb_convert_encoding(
    file_get_contents('t1.txt'), 
    "UTF-8" 
); 

您也應該檢查雙方的PHP文件,你必須有文本文件的編碼。

+0

現在,它更奇怪..它輸出: advhasgdvgvолÑолоÑваd ouhh \t !!!!!!!!!!!!摹 – Hurrem

+0

然後,您可以通常只是用'echo'或「正常打印」 –

0

我用這種方法來使用UTF-8進行處理:

<?php 
$string = 'ئاکام';//my name 
mb_internal_encoding("UTF-8"); 
$mystring = mb_substr($string,0,1);ئ 
//without mb_internal_encoding the return was Ø 
echo $mystring; 
?> 

我還保存所有文件(編碼爲UTF-8)

0

Unicode字符已超過每封信1個字節,所以你訪問他們,你必須做的:

echo $homepage[30] . $homepage[31]; 
> и 

但是,這是假設的特點是隻有2個字節,但有可能更多;所以更一般的解決辦法是:

function charAt($str, $pos, $encoding = "UTF-8") 
{ 
    return mb_substr($str, $pos, 1, $encoding); 
} 
0

PHP真的不支持UTF-8字符串,這就意味着訪問文本[N]將獲得的第n個字節,而不是第n個字符。 UTF-8字符可能有1-4個字節在其中,這意味着你根本無法通過索引使用PHP,因爲你不知道一個字符開始從什麼索引來訪問它們。此外,你顯然不能檢索使用文本[n]的一個char,因爲它可能需要多個字節。

根據您的需要,您可以使用utf8_decode()將字符串轉換爲ISO 8859,或者使用一些支持UTF-8的機制從頭開始遍歷字符串並提取您需要的字節。

要知道,PHP的Linux和Windows版本可能會在一定的轉換產生不同的輸出,如mb_strtoupper(),而不是所有的正則表達式功能,支持UTF-8。