0

我有个问题。我需要从我的文本文件中找到一些 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 олыолоываи ouhh

并且它正确输出它,当我只是调用 $homepage 时,但是当 $homepage[14] 它不起作用。这里是输出:

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

4

4 回答 4

0

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

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

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

于 2013-02-04T20:11:10.330 回答
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 文件和那里的文本文件的编码。

于 2013-02-04T19:29:58.070 回答
0

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

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

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

function charAt($str, $pos, $encoding = "UTF-8")
{
    return mb_substr($str, $pos, 1, $encoding);
}
于 2013-02-04T20:04:23.760 回答
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)

于 2013-02-04T19:53:14.587 回答