問題タブ [mbstring]
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 での「mb_detect_encoding()」の好ましい文字エンコード順序は何ですか?
の 2 番目の引数として渡すのに適した文字エンコード順序は何ですかmb_detect_encoding( )
。
UTF の場合は ASCII が返され (場合によっては)、gb2312 の場合は EUC-CN が返されます。関数に渡されたシーケンスは、簡体字中国語の EUC-CN 互換文字列として返されます。
ここに私が収集したものをいくつか示しますが、リストをできるだけ包括的にしたいと思います.
順序を修正し、このリストをできるだけ大きくするのを手伝ってください.
編集1:
これを使用してやりたいことは、任意の文字列を utf8 に変換することだけです。
編集2:
以下の提案を考慮して、エンコード変換でテキストが無駄になる可能性を最小限に抑えたいと考えています。これは、変換されたテキストだけが私のサイトに依存しているためです。したがって、私が使用しているソリューションが完璧なものでなくても. 最も信頼できるソリューションを教えてください。
php - PHP文字列関数とmbstring関数
私はこれまで英語のみであったアプリケーションを持っています。テンプレートとデータベース全体のコンテンツエンコーディングはUTF-8です。私は現在、アプリケーションを国際化/翻訳して、UTF-8を絶対に必要とする文字セットを持つ言語に変換することを検討しています。
アプリケーションは、、、などのさまざまなPHP文字列関数を使用します。マルチバイト文字を正しく処理するには、これらを、、、strlen()
などのマルチバイト文字列関数に切り替える必要があると理解しています。私はこのトピックを少し読んでみましたが、事実上、私が見つけることができるすべてのものが「エンコーディング理論」に深く入り込んでおり、質問に対する簡単な答えを提供していません。たとえば英語とアラビア語の両方で正常に動作することを使用して期待していますか、それとも私がまだ注意する必要がある何かがありますか?strpos()
substr()
mb_strlen()
mb_strlen()
mb_substr()
strlen()
mb_strlen()
どんな洞察も歓迎されます、そして私が私の相対的な無知で彼らの心の近くでエンコーディングをしている誰かを怒らせているならば、謝罪します。
php - 文字列を別の文字セットに損失なく安全に変換できるかどうかを確認する方法は?
文字列を文字セットから別の文字セットに変換する前に、この変換がロスレスになるかどうかを知ることは可能ですか?
たとえば、UTF-8 文字列を latin1 に変換しようとすると、変換できない文字が に置き換えられ?
ます。結果の文字列をチェックし?
て、変換がロスレスであるかどうかを確認することは、明らかに選択肢ではありません。
私が今見ることができる唯一の解決策は、元の文字セットに戻し、元の文字列と比較することです:
ただし、これは簡単で汚いものであり、予期しない動作が発生する場合があり、 mbstring、iconv、またはその他のライブラリを使用してこれを行うよりクリーンな方法があると思います。
php - 分散 Web アプリケーションの PHP utf-8 のベスト プラクティスとリスク
このトピックについていくつか読んだことがありますが、それでもコミュニティと共有したい疑問があります.
私が開発したアプリケーション DaDaBIK に完全な utf-8 サポートを追加したいと考えています。アプリケーションは、さまざまな DBMS (MySQL、PostgreSQL、SQLite など) で使用できます。データベースで使用される文字セットは ANY にすることができます。文字セットを設定または想定することはできません。
私のアプローチは、iconv 関数を使用して、db から utf-8 で読み取ったすべてを変換し、DB に書き込む必要があるときに元の文字セットに変換することです。これにより、utf-8 で作業していると仮定できます。
問題は、おそらくご存じのとおり、PHP がネイティブで utf-8 をサポートしていないことです。また、mbstring を使用すると仮定しても、( http://www.phpwact.org/php/i18n/utf-8によると)存在します。 PREG 拡張機能、strcspn、trim、ucfirst、ucwords など、utf-8 および DON で問題を引き起こす可能性のあるいくつかの PHP 関数には、mbstring 対応がありません。
adodb や htmLawed などの外部ライブラリを使用しているため、すべてのソース コードを制御することはできません...これらのライブラリでは、これらの関数を使用するケースがいくつかあります....何かアドバイスはありますか? そして何よりも、ワードプレスなどの非常に人気のあるアプリケーションは、この (IMHO 大きな) 問題をどのように処理していますか? 彼らがコードに「トリム」を持っていないとは思えません....彼らはリスクを冒しているだけですか(データの破損など)、それとも私が見ることができないものがありますか?
どうもありがとう。
php - PHP が php_mbstring.dll を有効にしてコンパイルされていることを確認します
現在、php を使用しているアプリケーションでエラーが発生しています。ここにエラーメッセージがあります
サードパーティのライブラリを使用して pdf ファイル (MPDF) を生成しています。私の loaclhost (Windows) では正常に動作しますが、Linux サーバーにデプロイすると、上記のエラーがスローされます。
何が起こっているのか、どうすれば修正できるのか、誰でも助けてくれますか。Linux サーバー構成に php_mbstring.dll がないようです。
php - 未定義の関数FOS\UserBundle \ Util \ mb_convert_case()の呼び出し
エラーが発生します
フィクスチャをロードしようとすると発生します。
最初のステップはmbstring.soextをインストールすることだったので、私はphpをコンパイルしました
mbstringextを正常にコピーするより
と追加
私のphp.iniファイルに。残念ながら、私はまだそのエラーを受け取り、php-mはロードされた拡張機能としてmbstringを表示しません。どうしたの?
どんな助けでも大歓迎です。
PHP 5.4.7、Debian Lenny
phpcheck.php出力から
php - PHPセキュリティ:エンコーディングはどのように誤用される可能性がありますか?
この優れた「UTF-8」の質問から、私はこれについて読みました。
残念ながら、送信した文字列を保存したり、どこでも使用したりする前に、送信されたすべての文字列が有効なUTF-8であることを確認する必要があります。PHPのmb_check_encoding()でうまくいきますが、それを忠実に使用する必要があります。悪意のあるクライアント は必要なエンコーディングでデータを送信できるため、これを回避する方法は実際にはありません。PHPにこれを確実に実行させるためのトリックは見つかりませんでした。
今、私はまだエンコーディングの癖を学んでいます、そして私は悪意のあるクライアントがエンコーディングを悪用するために何ができるかを正確に知りたいです。何を達成できますか?誰かが例をあげることができますか?ユーザー入力をMySQLデータベースに保存する、または電子メールで送信するとします。この機能を使用しない場合、ユーザーはどのように害を及ぼす可能性がありmb_check_encoding
ますか?
php - サブストリング utf-8 文字と 10 語までの英数字
この文字列の部分文字列を取得する際に問題があります:
n 番目の文字まで表示するか、少なくとも壊れた/不完全な単語を表示したかっただけです。
最初に私は試しました。
しかし、結果は次のようになります。
単語は完全ではありません
私も正規表現を使ってみました:
結果:
次のようなものを得るために何ができたでしょうか
単語は完全でなければなりません。これを達成するために使用できるphpにmb_関数はありますか?
php - PHP で mbstring を有効にする必要があるのはいつですか?
mbstring 拡張機能は、日本語に加えて、簡体字中国語、繁体字中国語、韓国語、およびロシア語の拡張サポートを提供します。
PHP ページに日本語の文字 (www.google.co.jp からコピーしたもの) を表示してみましたが、問題なく表示されました。UTF-32 文字を表示するときに mbstring を使用する必要がありますか?
編集:
コードの 2 行目を機能させるにはどうすればよいですか?
PS: PHP のデフォルト文字セットを UTF-8 に変更しました。
php - mb_convert_case 未定義関数 (Symfony2 FOS/UserBundle)
Symfony2 アプリケーションで、次のエラーが表示されます。
致命的なエラー: 18 行目の /Applications/MAMP/htdocs/application/vendor/bundles/FOS/UserBundle/Util/Canonicalizer.php の未定義関数 FOS\UserBundle\Util\mb_convert_case() の呼び出し
PHP 5.3.6 を使用しています。
mbstring が有効になっていることを示す私の PHPInfo は次のとおりです。
http://i.stack.imgur.com/FCMDv.png
mbstring が有効になっている場合、mb_convert_case が見つからないのはなぜですか?