タグ

PHPとUTF-8に関するiwwのブックマーク (8)

  • mb_convert_encodingのautoが危険な理由 - Qiita

    mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding ] ) は文字エンコーディングを変換する関数です。 mb_convert_encodingに潜む問題 第3引数の $from_encoding には変換前の文字エンコーディング名を指定しますが、ここを"auto"と指定しておくと、環境によっては Warning: mb_convert_encoding(): Unable to detect character encoding のようなエラーが発生し、文字エンコーディングの変換が失敗する場合があります。 ですので、"auto" は極力使わず、文字エンコーディングを指定することをおすすめします。 autoとphp.iniの依存関係 なぜこのようなエラーが発生するかというと、autoは

    mb_convert_encodingのautoが危険な理由 - Qiita
  • json_encode()でjsonをUTF-8に変換する方法(サロゲートペア対応) - Qiita

    json_encode()で出力したjsonってユニコードエスケープされているのですが、出力したjsonを手でメンテしたりすることを考えると、utf-8になっている方がうれしいわけです。 PHP6だとunicode_encode()なるステキ関数が用意されているみたいですが、PHP5だと自前で変換するしかない。 http://d.hatena.ne.jp/iizukaw/20090422 というすばらしい記事があったのでここのunicode_encode()を使ってjsonのutf-8化をしていたのですが。 問題 サロゲートペアという、1つの文字をunicode文字2文字分(4バイト)で表現する文字があって、上のunicode_encode()だとこれらの文字をうまいこと変換できませんでした。 正規表現"/\\\\u([0-9a-zA-Z]{4})/"でユニコード文字をひとつずつ取り出して

    json_encode()でjsonをUTF-8に変換する方法(サロゲートペア対応) - Qiita
    iww
    iww 2016/06/28
    PHP5.4以降ならJSON_UNESCAPED_UNICODE
  • FuelPHPで内部文字コードと出力文字コードが違うケースを割とちゃんと対応する

    FuelPHPネタが増えてきた。 今日はFuelPHPで内部文字コードと出力文字コードが違う場合の対応。 簡単に対応するのであれば、Controllerのafterメソッドでmb_convert_encodingしてあげればよい。 public function after($response) { $this-> template = mb_convert_encoding($this-> template, "SJIS", "UTF-8"); return parent::after($response); } ただ、文字コード周りをちゃんと設定するのであれば以下のようにした方がいいと思う。 1. fuel/app/config/config.phpで文字コード周りの設定を行う <?php return array( /** * アプリケーションの文字コード */ 'encoding'

    iww
    iww 2016/04/03
    $this->template が無い
  • PHPでサロゲートペアの文字列を検出する - Qiita

    /** * 文字列にサロゲートペアが含まれるかどうかをチェックします。 * * @param string $str チェック対象の文字列 * @return bool|string サロゲートペアが含まれない場合false、含まれる場合該当の文字 */ function contains_surrogate_pair_character($str) { if ($str === NULL) return FALSE; // UTF-16へ変換し、一文字ずつチェックを行う $str_utf16 = mb_convert_encoding($str, "UTF-16", "UTF-8"); $str_length = mb_strlen($str_utf16, 'UTF-16'); for ($i = 0; $i < $str_length; $i++) { $chars = str_spl

    PHPでサロゲートペアの文字列を検出する - Qiita
  • TOOL更新_半角、JISの第一、第二水準以外をエラーにするロジック。 - kazpgmの日記

    TOOL更新_半角、JISの第一、第二水準以外をエラーにするロジック。 1.これはEthnaのEthna_ActionFormクラスのcheckVendorCharメソッドを参考に作成した。EthnaはEUCで機種依存文字をチェックしている。自分はSJISで第一、第二水準以外をチェックした。「kaz PHPプログラム自動作成◎自動生成おたすけTOOL」はUTF-8なのでSJIS-WINにしてからチェックした。 <=JISは制御文字が入るらしくてハンドリングが難しいので同じ第一、第二水準を扱えるSJIS-WINを選んだ。 Ethnaからもらったのは、文字コードをヘキサにする方法。そのヘキサを判定する方法。・・・これがなかなかわからなかった。 SJISで第一、第二水準というのがJISの第一、第二水準の位置をシフトしたものだということをGoogleった結果わかった。そのコード位置(でも、見たWE

  • [PHP] preg_match の正規表現の中で日本語(マルチバイト文字)を使う

    正規表現の中で日語(マルチバイト文字)を使ってマッチさせるには、パターン修飾子というものを使う必要がありました。$regex の最後に記述している小文字の u がパターン修飾子です。u は$regex を UTF-8 として扱うようになります。 <?php $text = '私の名前は佐藤です。'; $regex = '/私の名前は(.+)です。/u'; preg_match($regex, $text, $matches); var_dump($matches);

    [PHP] preg_match の正規表現の中で日本語(マルチバイト文字)を使う
  • phpのescapeshellarg()に日本語を渡す際の注意 | Firegoby

    めっちゃハマったのでメモ。 これはマニュアルにも記載されていないみたい。 escapeshellarg() の引数に日語を渡す もともと別のサーバーで動作していたphpスクリプトを別のサーバーに移行した際に、以下のような不具合に遭遇した。 <?php $tmp = '日語'; $tmp = escapeshellarg($tmp); echo $tmp; // $tmpの中身がカラ!? ?> 要はescapeshellarg()に日語を渡すと値がカラ(シングルクォートのみ)になるということ。 原因 いろいろ調べた結果、どうやらescapeshellarg()は、OS側の環境変数LANGの値によって挙動が変わるらしい。 今回はインストール直後の某VPSに移行したばかりだったのでLANGが設定してなかった。 そこで、/etc/sysconfig/i18nに以下のような記述を追加したら正常

    iww
    iww 2014/04/02
  • Geekなぺーじ : 画像上に文字列を表示

    ImageCreateFrom○○で読み込んだイメージリソースの上にTrueTypeフォントによる文字列を書く方法です。 サンプルコード 以下のサンプルでは、フリーの日フォントであるIPAフォント(Pゴシック)を利用しています。 「/path-to-fontfile/」の部分を必要に応じて変更して下さい。 <?php $img = ImageCreateFromJPEG('sample0.jpg'); # 必要に応じてUTF8へ変換(環境依存) $text = mb_convert_encoding('オランダシシガシラ', 'UTF-8', 'auto'); # 白い文字を書き込む $white = ImageColorAllocate($img, 0xff, 0xff, 0xff); ImageTTFText($img, 16, 0, 5, 200, $white, '/path-

  • 1