使用UTF-8编码的文本

时间:2013-02-04 19:23:28

标签: php utf-8 utf-16

我有问题。我需要从我的文本文件中找到一些utf-8字符并输出它们,但它不输出字母,而是输出“?”,问号......

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

所以,这里很奇怪,如果我使用exsisting index它什么都不输出,但如果我把

echo $homepage[35];

输出“?”, 但我的$ homepage字符串只有30个字符长,出了什么问题?

非常奇怪,它正确地从文件中获取字符串并正确输出,但是当我通过索引调用字符时,它不起作用..这是我的文本文件中的内容: 的 advhasgdvgv олыолоываи ouhh

并且它正确输出,当我只是打电话给$ homepage,但当$ homepage [14]它不起作用。这是输出:

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

4 个答案:

答案 0 :(得分: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文件和您在那里的文本文件的编码。

答案 1 :(得分: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)

答案 2 :(得分:0)

Unicode字符每个字母超过1个字节,因此您可以访问它们:

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

但是假设字符只有2个字节,但可能会有更多字节;所以更通用的解决方案是:

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

答案 3 :(得分:0)

PHP并不真正支持字符串中的UTF-8,这意味着访问text [n]将获得第n个字节而不是第n个字符。 UTF-8字符可能包含1-4个字节,这意味着您无法使用PHP通过索引访问它们,因为您不知道char从哪个索引开始。此外,您显然无法使用text [n]检索char,因为它可能需要多个字节。

根据您的需要,您可以使用utf8_decode()将字符串转换为ISO 8859,或者使用一些支持UTF-8的机制从头开始迭代字符串并提取您想要/需要的字节。 / p>

请注意,Linux和Windows版本的PHP可能会在某些转换中产生不同的输出,例如mb_strtoupper(),并且并非所有正则表达式函数都支持UTF-8。