問題タブ [multibyte-functions]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - 外国語のphp sprintf()?
sprintf のような継ぎ目は、外国語の文字に問題がありますか? それとも私が何か間違ったことをしているのですか?ただし、文字列から åäö のような文字を削除すると機能するようです。それは必要でしょうか?
レポート用に次の行を正しく配置する必要があります。
私は次のように sprintf() を使用しています: %-12s %-8s -%-10s -%20s %8.2f
使用: php-5.3.23-nts-Win32-VC9-x86
c++ - wchar_t にサロゲート (UTF-16) があるかどうかを確認する方法は?
この問題に関する他の投稿をいくつか見ましたが、コードポイントが 2 バイト (Windows 上) の wchar_t を複数使用しているかどうかをプログラムで判断する方法の詳細を見つけることができませんでした。
例:
文字が length() > 1 になるタイミングを判断する方法を知りたいです。
php - UTF-8 テキスト内の単語の正しい位置を取得するにはどうすればよいですか?
テキストの文を取得し、特定の単語を太字にする単純な PHP コードがあります。
まず、必要な単語とテキスト内での位置を含む配列を取得します。
次に、単語ごとに$words_found
、その単語が中央にあるテキストの一部を取得します。
UTF-8
テキストがデンマーク文字 (åæéø)のテキストであることを除いて、問題なく動作します。したがって、$first_part
または$last_part
がユニコード文字で始まる場合、susbtr 文字列は空になります。
私はmb_substr
機能を知っているので、コードをそれに置き換えます。
しかし、この関数 ( mb_substr
) では、単語 ( $offset
) の位置が間違っているため、新しい部分文字列 ( $sentence
) が一致する必要があります。
のようなものは存在しますmb_str_word_count
か?単語の正しい位置を取得するにはどうすればよいですか?
c++ - 読み取ったバイトが日本語か英語かを調べる方法は?
日本語とASCII文字を含む配列があります。読み取った文字が英字なのか日本語なのか調べています。
これを解決するために、私は次のようにフォローしました
- 最初のバイトを読み取り、multicharcterswidth が 1 に等しくない場合、ポインターを次のバイトに移動します。2 バイト全体を一緒に表示し、日本語の文字が読み取られたことを表示します。
- multicharcterswidth が 1 の場合、そのバイトを表示します。と表示メッセージ英語が読まれました。
上記のアルゴは正常に動作しますが、日本語の半角形式の場合は 1 バイトしかないため失敗します。文字が日本語か英語かを調べるにはどうすればよいですか?
**注:** 私が試したこと Web から読んだ最初のバイトは、アルゴのステップ 1 で説明した日本語かどうかを示します。しかし、半角ではうまくいきません。
編集:私が解決していた問題には、文字列を識別するために、文字の最初と最後に制御文字 0X80 を含めます。制御文字の終わりを識別するために、次のように書きました。
cntlchar.....(私の文字は、日本語にすることができます).....cntlchar
英語ではうまくいきましたが、日本語の半角ではうまくいきませんでした。
どうすればこれを処理できますか?
c - `strstr` を使用して文字列内のマルチバイト UTF-8 文字を検索するのは安全ですか?
前の質問に続いて: man ページの免責事項にもかかわらず、`strchr` がマルチバイト文字で動作するように見えるのはなぜですか? strchr
、それは悪い選択だと思いました。
代わりに、単一の文字を探すために使用することを考えていstrstr
ます (マルチバイトではありませんchar
):
出力:
マルチバイト文字であるé
これは、私のマルチバイト文字の最初のバイトの位置です。
アプリオリに、これは標準的な使用法ではありませんが、strstr
うまく機能しているようです。
この回避策は安全ですか? バグの原因となる副作用や特殊なケースについて考えていただけますか?
[編集]:型を使用したくないことwchar_t
、および処理する文字列が UTF-8 でエンコードされていることを正確に説明する必要があります (この選択について議論できることは承知していますが、これは無関係な議論です)
php - PHP mb 関数を使用して、マルチバイト文字列を約 n 語に切り捨てます
SOでこの質問をした後、Web上で直接的な回答/コードが見つからなかったために、文字列の簡単なバージョンを取得するカスタムPHP関数を準備する必要がありました。
要件は次のとおりです。
- でエンコードされた
、、
multibyte language
などの文字の認識ş
ı
ğ
UTF-8
- 許容される長さを決定できる (文字数を使用して)
- 長い文字列の一部を取得した後、文字列の末尾にある単語は意味のあるものでなければならず、その部分の末尾に「...」を連結する必要があります
- バイトではなく、キーストローク (文字) を考慮に入れる必要があります
読者はコードが機能することを知っているはずですが、私は専門家ではありません。より効率的で、より深く考えられたコーディングによって、同じ目的を達成することが可能であると私は信じています。ご覧のとおり、コードにはセキュリティ上の問題はなく、入力文字列が許可されているよりも長い場合にのみ操作します。
よろしく
php - MB関数なしのPHPおよびUTF-8文字列関数?
PHP で UTF-8 を使用しようとすると、自分のサイトで出力が問題ないように見えます (テスト時に正しい äöüß などを表示します) が、単純な問題があります... 使用するecho strlen("Ä");
と「2」と表示されます... 読みましたこのトピック: strlen() と UTF-8 エンコーディング
回答で私はこれを読みました:
多くの場合、UTF-8 デコーダーが有効な UTF-8 データではないデータを読み取ると、置換文字が挿入されます。
私のデータが有効な UTF-8 ではないのはなぜですか? なぜなら:
- すべてのファイルを「UTF-8 no BOM」で保存しました
- 最初の行に UTF-8 ヘッダーを使用
- 私のブラウザにも「エンコーディング:UTF-8」と表示されます
これは私のコードです:
私の質問: UTF-8 で通常の PHP 関数を使用できますか、それとも「mb」関数を使用する必要がありますか?
通常の PHP 関数を使用できる場合、コードで strlen() を 1 ではなく 2 と表示するのはなぜですか?