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 文字しかありません。何が問題なのですか?

これは非常に奇妙です。ファイルから文字列を正しく取得し、正しく出力しますが、インデックスで文字を呼び出すと機能しません。テキスト ファイルの内容は次の とおりです。

$homepage を呼び出すと正しく出力されますが、$homepage[14] を呼び出すと機能しません。出力は次のとおりです。

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

4

4 に答える 4

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 に答える
0

PHP は実際には文字列で UTF-8 をサポートしていません。つまり、text[n] にアクセスすると、n 番目の文字ではなく n 番目のバイトが取得されます。UTF-8 文字には 1 ~ 4 バイトが含まれる場合があります。つまり、文字がどのインデックスから始まるかわからないため、PHP を使用してインデックスでアクセスすることはできません。また、複数のバイトが必要になる可能性があるため、text[n] を使用して char を取得することはできません。

必要に応じて、utf8_decode() を使用して文字列を ISO 8859 に変換するか、UTF-8 対応のメカニズムを使用して文字列を最初から反復処理し、必要な/必要なバイトを抽出することができます。

PHP の Linux バージョンと Windows バージョンは、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 文字あたり 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 に答える