Php 使用UTF-8编码文本

Php 使用UTF-8编码文本,php,utf-8,utf-16,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]; 所以,这里很奇怪,如果我使用现有的索引,它什么也不输出,但是如果我把 echo $home

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

ini_set( 'default_charset', 'UTF-8' );
$homepage = file_get_contents('t1.txt');
echo $homepage;
echo "\t";
echo "\t!!!!!!!!!!!!"; 
echo $homepage[14];
所以,这里很奇怪,如果我使用现有的索引,它什么也不输出,但是如果我把

echo $homepage[35];
它输出“?”, 但是我的$homepage字符串只有30个字符长,怎么了

这很奇怪,它正确地从文件中获取字符串,并正确地输出它,但当我按索引调用字符时,它不起作用。。以下是我的文本文件中的内容: advhasgdvgv олыолоываи 啊

当我只调用$homepage时,它会正确地输出它,但当$homepage[14]不起作用时,它会正确地输出它。下面是输出:


advhasgdvgv是的

尝试
mb\u convert\u编码
,看看这是否解决了问题

string mb\u convert\u编码(string$str,string$to\u encoding[,mixed$from\u encoding])


您还应该检查PHP文件和文本文件的编码。

我使用这种方法处理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)

Unicode字符的每个字母超过1字节,因此您必须执行以下操作才能访问它们:

echo $homepage[30] . $homepage[31];
> и
但这是假设字符只有2个字节,但可能还有更多;因此,更普遍的解决办法是:

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

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

根据需要,可以使用utf8_decode()将字符串转换为ISO 8859,也可以使用某种UTF-8感知机制从头开始遍历字符串并提取所需的字节


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

现在,更奇怪的是。。它的输出:ï?advhasgdvgvÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐÐиÐouhh!!!!!!!!!!!!gYou通常可以正常使用
echo
print
,这不是因为Unicode字符存储在超过1个字节中,所以访问这样的字符只能得到第一个字节吗?
function charAt($str, $pos, $encoding = "UTF-8")
{
    return mb_substr($str, $pos, 1, $encoding);
}