我有问题。我需要从我的文本文件中找到一些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!!!!!!!!!!!!
答案 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。