問題タブ [multibyte]
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 - mb_str_replace()... は遅いです。代替案はありますか?
私が実行しているいくつかの文字列置換がマルチバイトセーフであることを確認したい. ネットで mb_str_replace 関数をいくつか見つけましたが、遅いです。おそらく500〜900バイトを通過させた後、20%の増加を話している.
推奨事項はありますか?preg_replace はネイティブでコンパイルされているため、より高速になる可能性があるため、使用することを考えています。任意の考えをいただければ幸いです。
sed - sedを使用してファイルからマルチバイト文字を削除する
ファイルからすべてのマルチバイト文字を削除する必要があります。それらが何であるかわからないため、範囲全体をカバーする必要があります。
次のようにgrepを使用してそれらを見つけることができます:grep -P "[\ x80- \ xFF]"'myfile'
sedで同じようなことをしようとしていますが、代わりにそれらを削除してください。
乾杯
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";
動作しませんか?
アイデアをありがとう!
php - preg_replaceが意図したとおりに機能しているのに、PHPmb_ereg_replaceが置き換えられない
私は文字列内でスペースを期待する空の文字列を持つすべての非単語文字を置き換え、すべての複数のスペースを1つの単一のスペースとしてまとめようとしています。
次のコードはこれを行います。
しかし、mb_ereg_replaceを使用しようとしても、何も起こりません。
$ cleanedStringは、上記の場合の$nameの場合と同じです。私は何が間違っているのですか?
php - マルチバイト文字列に対する str_replace() は危険ですか?
特定のマルチバイト文字セットが与えられた場合、以下が意図したとおりに動作しないと仮定して正しいでしょうか?
特に、入力が 0xbf5c のような有効な文字を含む可能性のある文字セットにあった場合、攻撃者は 0xbf22 を挿入して 0xbf5c22 を取得し、有効な文字の後に引用符で囲まれていない二重引用符 (") を残します。
この問題を軽減する簡単な方法はありますか、それともそもそも問題を誤解していますか?
(私の場合、文字列は HTML 入力タグの値属性に入ります: echo 'input type="text" value="' . $string . '">';)
編集: さらに言えば、preg_quote() のような関数はどうですか? charset 引数がないため、このシナリオではまったく役に立たないようです。文字セットを UTF-8 に制限するオプションがない場合 (はい、それはいいことです)、本当にハンディキャップを負っているように見えます。その場合、どのような置換および引用機能を使用できますか?
php - UTF-8 用のマルチバイトセーフ wordwrap() 関数
PHP のwordwrap()
関数は、UTF-8 のようなマルチバイト文字列に対して正しく動作しません。
コメントにmbセーフ関数の例がいくつかありますが、いくつかの異なるテストデータでは、すべて問題があるようです。
関数は とまったく同じパラメータを取る必要がありますwordwrap()
。
具体的には、次のように機能することを確認してください。
- の場合は単語の途中を
$cut = true
カットし、それ以外の場合は単語の途中をカットしない - 次の場合、単語に余分なスペースを挿入しないでください
$break = ' '
- のためにも働く
$break = "\n"
- ASCII、およびすべての有効な UTF-8 で機能します
c++ - c / c ++コンソールアプリケーションで通常複数のバイト文字を出力するにはどうすればよいですか?
デフォルトでは、マルチバイト文字は???
コンソールのように表示されますが、どうすれば修正できますか?
php - php拡張機能:mb_*関数の使用方法
PHPにはスクリプト用の機能がたくさんあります。この機能は、拡張機能の作成者が何らかの形で利用できますか?マルチバイト関数を実際に使用したいのですが、その例が見つかりません。
php - PHPでのマルチバイトセーフURLタイトル変換
マルチバイトの安全なタイトル=>URL文字列コンバーターを作成しようとしていますが、他の文字を削除するときにURLで合法的なアジア(およびその他)の文字を許可する方法がわからないという問題が発生しました。これが現在設定されている機能です。
そこにはいくつかのCMS関連の機能があり、それらの関数は実際にはクラスの一部であることに注意してください。主な関数呼び出しは
そして、問題はその関数自体の正規表現の置換にあると確信していますが、既存の機能を壊さずに何を変更すればよいかはよくわかりません。
次のタイトルを取得して、urlsafeタイトルを返してもらいたいです。
「最初のブログ!」=>「The-Very-First-Blog」
「スーザンは本日、グラスゴーのベラヒューストン・パークでローマ法王の」(これが何を言っているのかわからない)が、urlsafeに変換する必要があり、現時点では空の文字列を返すだけです。
arm - ARM Cortex-A8: 1 回のメモリ読み取りでフェッチされるバイト数は?
ARM cortex-a8 プロセッサで実行されている画像処理プロジェクトを改善しようとしています。
メモリから 8 ビットのグレースケール イメージ データにアクセスしていました。私の関数では、現在、個々のピクセル値にバイト単位でアクセスしています。
NEONを利用することで、メモリから128/8 = 16バイトにワンショットでアクセスし、関数でそれらを利用することでこれを改善できると考えました。しかし、変更されたバージョンを実行すると、実際にはバイト単位のアクセスよりも時間がかかっていることがわかります。NEON を使用したフェッチがボトルネックになり、計算時間よりも時間がかかっていると思います。
ARM Cortex-A8 のデータ バス サイズは? 1 回のメモリ フェッチでメモリからアクセスされるバイト数は?