問題タブ [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.

0 投票する
2 に答える
180 参照

php - 3文字以下の単語をwordVVVに変換するREGEXP

3文字以下の単語の出現を、文字列VVVが付加された同じ単語に変換しようとしています。
例:for-> forVVV
私はラテン文字(UTF8)を使用していないため、MBを使用しています。
私が持っているのは:

私は何が欠けていますか?

これがケーススタディです。何もキャッチされないことを確認してください。

0 投票する
4 に答える
25402 参照

php - PHP マルチバイト str_replace?

PHP でアクセント付き文字の置換を試みていますが、ファンキーな結果が得られます。これは、UTF-8 文字列を使用していて、str_replace がマルチバイト文字列を適切に処理できないためだと思います..

私が得る結果:

期待される結果:

編集: 内部文字ハンドラーを UTF-8 に設定しました (mb_internal_encoding() に従って)。また、$str の値は UTF-8 であるため、関連するすべての文字列は UTF-8 です。str_replace() は文字セットを検出して適切に使用しますか?

0 投票する
8 に答える
3916 参照

php - PHPでUTF-8文字セットを使用する-mb関数は必要ですか?

ここ数日、PHPコードベースをlatin1からUTF-8に変換することに取り組んできました。2つの主な解決策は、シングルバイト関数を組み込みのマルチバイト関数に置き換えるか、php.iniファイルにmbstring.func_overload値を設定することです。

しかし、スタックオーバーフローでこのスレッドに出くわしました。ここで、thomasrutterによる投稿は、スクリプトと文字列リテラルがUTF-8でエンコードされている限り、マルチバイト関数はUTF-8には実際には必要ないことを示しているようです。

これが正しいかどうかについて他の証拠は見つかりませんでした。コードをmb_functionsに変換する必要がないことが判明した場合は、リアルタイムで節約できます。これに光を当てることができる人はいますか?

0 投票する
1 に答える
3157 参照

php - PHP 値 mbstring.internal_encoding を htaccess ファイルから設定できますか?

マルチバイト データの関数のオーバーロードを有効にするために使用される次の PHP コマンドは、.htaccess ファイル内から設定すると機能しないようです。

php_value mbstring.func_overload 7

PHP 5.2.x バージョンにバグがあり、これが正しく機能しないことを読みましたが、私は PHP 5.3.0 を使用していますが、それでも機能しませんか?

しかし、この設定が htaccess を対象としていない場合、それを変更するために利用できる他のオプションはありますか? php.ini ファイルで設定できることはわかっていますが、そうすると、サーバーでホストされている非 mb コードに悪影響が及ぶ可能性があります。

0 投票する
2 に答える
3412 参照

php - PHP で Unicode を検索する strpos (およびインライン UTF-8 を処理する)

UTF-8 である場合とそうでない場合がある別の文字列 (干し草の山) 内の 2 文字の Unicode 文字列 (針) の単純な検索の処理に問題があります。

問題の一部は、 で使用するコードを指定する方法がわからないこととstrpos、コードの特別なサポートを使用して PHP をコンパイルする必要があるかどうか、または使用mb_strposしようとしているものを使用する必要があるかどうかがわからないことです。利用できない場合もありますので避けてください。

すなわち。たとえば、針は U+56DE U+590D(スペースなしで)

preg_match ではそうかもしれませんpreg_match("@\x{56DE}\x{590D}@",$haystack) が、実際にはどちらが利用できない可能性があり、とにかく@u取得します。Compilation failed: character value in \x{...} sequence is too large

とにかく、preg_match は strpos よりもかなり遅くなる可能性があるため、使用したくありません (検索する必要がある他のシーケンスがあります)。

1 バイト シーケンス (おそらく 5 ~ 6 文字)に変換U+56DE U+590Dし、strpos を介して検索できますか? もしそうなら、それをバイトに変換する方法がわかりません。

とにかく、PHPでインラインでユニコードを指定するにはどうすればよいですか? PRCEの外ということですか?

$blah="\u56DE\u590D"; 動作しませんか?

アイデアをありがとう!

0 投票する
4 に答える
11006 参照

winapi - Windows API:ANSIおよびワイド文字列-UTF8またはASCIIですか?UTF-16またはUCS-2LE?

私はエンコーディングに精通していませんが、私が知っていると思うことは次のとおりです(間違っているかもしれませんが):

  1. ASCIIは、7ビットの固定長エンコーディングであり、ASCIIチャートにある文字を使用します。
  2. UTF8は、8ビットの可変長エンコーディングです。すべての文字はUTF8で記述できます。
  3. UCS-2 LE / BEは、最も一般的な文字をサポートする固定長の16ビットエンコーディングです。
  4. UTF-16は、16ビットの可変長エンコーディングです。すべての文字はUTF16で記述できます。

それらは何よりも正しいですか?

さて、質問のために:

  1. Windowsの「A」関数(などSetWindowTextA)はASCII文字列を取り込みますか?または「マルチバイト文字列」(これについては以下でさらに質問します)?
  2. Windowsの「W」関数はUTF-16文字列またはUCS-2文字列を取り込みますか?彼らはUCS-2を取り入れていると思いましたが、名前がわかりにくいです。
  3. WideCharToMultiByteでは、Microsoftは「ワイド文字列」という単語をUTF-16を意味するために使用します。その文脈では、「マルチバイト文字列」とは何と見なされますか?UTF-8?
  4. LPWSTR「ワイド文字列」ですか?そうだと思いますが、それではUTF-16という意味ではないでしょうか。そして、それは、たとえば4バイトの文字を表示するために使用できるという意味ではないでしょうか。そうでない場合、... 4バイト文字を表示することは不可能ですか?(WindowsにはそれらのAPIがないようです。)
  5. WideCharToMultiByteのスーパーセットの機能はwcstombsありますか?両方とも同じタイプの文字列で機能しますか?または、一方はUTF-16で動作し、もう一方はUCS-2で動作しますか?
  6. ファイルパスはUTF-16またはUCS-2ですか?WindowsがMicrosoftのドキュメントから「不透明な文字の配列」として扱っていることは知っていますが、のような関数のC標準に従って、fwprintf標準化されたエンコーディングはありますか?
  7. 「ANSI」エンコーディングとは何ですか?それも正しい用語ですか?そしてそれはASCIIとどのように関係していますか?
  8. (もっと質問がありましたが、これで十分です...とにかくそれらのいくつかを忘れました...)

これらは多くの質問であるため、これらすべてがどのように接続するかについての説明へのリンク(とにかくWindows APIでは役に立たないUnicode標準を読むことを除いて)も大歓迎です。

ありがとうございました!

0 投票する
3 に答える
1361 参照

php - マルチバイト文字列から重複した文字を取り除くためのPHPメソッド?

うーん。PHP count_chars($string, 3) コマンドに相当するマルチバイト文字の関数を作成する方法を知っている人はいますか?

一意の各文字の 1 つのインスタンスのみのリストを返すようにします。それが英語だったら

「aaabggxxyxzxxgggghq xcccxxxzxxyx」

「abgh qxyz」が返されます (スペースがカウントされることに注意してください)。

(この場合、順序は重要ではありません。何でもかまいません)。

日本語の漢字の場合 (すべてのブラウザがこれをサポートしているかどうかはわかりません):

漢漢漢字漢字私私字私字漢字私漢字漢字私</p>

そして、使用された 3 つの漢字だけを返します。

漢字私</p>

UTF-8 でエンコードされた文字列で動作する必要があります。

0 投票する
2 に答える
3033 参照

php - PHP で mb_detect_encoding() を使用する場合の文字エンコーディング UTF8 の問題

RSSフィードを読んでいますhttp://beersandbeans.com/feed/

フィードには UTF8 形式であると表示されており、simplepie rss を使用してコンテンツをインポートしています。コンテンツを取得して保存するときは$content、次の手順を実行します。

これにより、次が生成されます。

 を出力するのはなぜですか?

0 投票する
2 に答える
343 参照

php - PHPを使用したUTF8の検出、保存、出力

他の多くのPHP開発者が文字エンコードで問題を抱えているように、質問では、データがUTF8として保存および出力されるようにするための手順の概要を説明します。他に何を考慮すべきか、または現在の考え方で変更すべきかについてアドバイスをお願いします。

DEFAULT CHARACTER UTF-8私のテーブルには次の照合があるmysqlデータベースがありますutf8_general_ci

私はphpスクリプトを使用してRSSフィードからデータを読み取り、そのデータをデータベースごとに保存しています。そのデータを保存する前に、次の手順を実行して、そのデータがUTF-8であるかどうかを確認します。

このデータをウェブページに出力するとき、私はphpでヘッダーを設定しました

header("Content-type: text/html; charset=utf-8");

また、Content-Typeメタタグをutf-8に設定しました

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

これまでのところ、すべてが期待どおりに機能し、面白い文字が出力されず、すべてがスムーズに進んでいますが、このデータを処理するときに他に何かを変更/検討する必要がありますか?

私が今抱えている問題は、このデータをtxtファイル(csv)に出力することです。ファイルを正常に作成したfwrite()を使用していますが、このファイルを渡すサードパーティは、ファイルがUTF-8ではないと言っています。データがUTF-8として出力されているかどうかわかりませんが、どうすれば確認できますか?SSH経由でリモートサーバーにログインし、取得Itâs aしたファイルをvimしたときに取得したファイルを、取得Itâ~@~Ysしたファイルを減らしたときに取得した場合It<E2><80><99>sここで何が欠けていますか?

前もって感謝します!

0 投票する
2 に答える
141 参照

php - Web サイト変換のヘルプ - UTF-8、すべてのベースをカバー... 関数、メタ、SQL utf-8

皆さんは私が思っていた前に質問に答えるという素晴らしい仕事をしました-私が何か間違ったことをしたことを知るために私の変換に深く入り込む前に、私はこれを尋ねます. 自分で作っているウェブサイトに 3 ページしかありません。フォーム、sqli db があります。UTF-8 を使用するように言われました (部分的に使用しましたが、完全には使用しませんでした) 笑。いいですね。100% UTF-8 に対応するように修正したいので、マルチバイト関数を使用せずに PHP、JS、および HTML で約 1,900 行のコードを記述しました。私はこれを行いました...(さまざまな場所からのコードの抜粋...)

PHP

HTML

SQL

(cpanel インターフェイスから) MySQL 接続照合": utf8_general_ci

SQL DB (まだ utf-8 より前のモード)

ユーザー名 varchar(50) latin1_general_cs

会社名 varchar(50) latin1_swedish_ci

fname varchar(25) latin1_swedish_ci

テーブルに貴重なデータがありません。それらを次のいずれかに変更します(ただし、どれかはわかりません)...

utf8_general_ci または utf8_unicode_ci

外国人にもサイトを利用できるようにしたいのですが、優先度は高くありませんが、UTF-8 スタイルで行っているので、おそらく外国語でも機能するでしょう。

私の質問は...

1)タイムゾーンを設定しましたが、php でロケールを設定したことがないため、ロケールを設定しませんでした。私はそれをする必要がありますか?トロント/カナダの場所でそれを行うにはどうすればよいですか?

2)ページ全体をUTF-8にするのに十分なメタタグを介して各ページを設定していますか

3)メタ タグを使用すると、すべてのフォーム フィールドが既に UTF-8 データとして入力されているということですか? そうでない場合は、どうすれば変更できますか。

4) DB にはどれを使用しますか? utf8_general_ci または utf8_unicode_ci

5)大文字と小文字を区別する必要があります。utf8 の ci しか表示されません。これは、「Dave」が「dave」とは異なるため、マルチバイト比較を使用すると自動的に大文字と小文字が比較されるためですか...??!?!?!

6)私のDBは現在、ASCIIのストレージ用に50文字と言います-DBでutf-8に切り替えることで、私のような英語の人にとっては50のストレージで問題ないと思います-しかし、外国人が来てたくさんの文字を入力した場合ユニコードの余分なバイトをすべて収容するには、ストレージを x4 増やす必要がありますか? より多くのストレージを使い果たしてもかまいませんが、これを割り当てる適切な方法がどのようになるか興味があります。そして、それは VARCHAR(50) であるため、とにかく本当に重要でしょうか? 名前が「Dave」の場合、4 文字になります。外国の名前だったら、記号の「デイブ」は12文字かもしれません!笑。したがって、ユーザー名フィールドに 100 を割り当てると、すべての文字が 4 バイトになる可能性は低いため、これを行う必要があります。または、英語の場合と同じようにx4に設定し、すべてVARCHARSにしてスペースを節約します。彼らがフォームにデータを入力するとき、私は MB_LENGTH 関数を使用します (正確な関数は忘れました) ので、入力する文字数を制御できます。

7) Unicode Web サイトをテストするにはどうすればよいですか? 私は美しい英語以外は何も使ったことがありません:)笑。ブラウザを切り替えるにはどうすればよいですか? 私が別の場所から来たふりをして、コードの山を入力し、mb_ (マルチバイト) 関数を使用するように書き直したら、関数が機能するかどうかを確認します。または、切り替えるものは何もありません... ALT 245 または何かを入力するだけで、記号が表示されますか?!?!? 外国人テスト文字の入力方法がわからない!ウェブサイトを十分にテストしていないため、すべての外国の顧客がパスワードを入力できないようにするためだけに英語を機能させるのは最悪です:)

8)特定の関数 ctype、mb_ を使用して Unicode 比較、文字列などを処理することを知っています。正常に機能しないものはありますか?

はい... 私は言葉が多いです !:) 私は Dreamweaver CS3 を使用していますが、それは問題ではありません。実際のファイルには UTF-8 文字が埋め込まれていません。

皆様の知恵をお待ちしております...