いわゆるGoogleなどの検索エンジンのようにスペース区切りをANDマッチする方法
function list_and_match($data, $search_str_space_separated){
$search_str_space_separated = mb_convert_kana($search_str_space_separated, "s");
$search_list = array();
$search_list = preg_split("/\s/",$search_str_space_separated);
$flag = 1;
foreach ($search_list as $v) {
if ( ! preg_match("/{$v}/iu",$data) ){
$flag = false;
break;
}
}
return $flag;
}
$text = "長い長い日本語のテストを行います。";
$search_text = "長い テスト";
if ( list_and_match($text, $search_text) ){
echo 'マッチしました';
}
PHPでPCの機種依存文字を検出し、変換(削除)するには以下のようにします。
function replace_kishu_kanji( $subject='' ){
$search = array( '①', '②', '③', '④', '⑤', '⑥', '⑦', '⑧', '⑨', '⑩', '⑪', '⑫', '⑬', '⑭', '⑮', '⑯', '⑰', '⑱', '⑲', '⑳', 'Ⅰ', 'Ⅱ', 'Ⅲ', 'Ⅳ', 'Ⅴ', 'Ⅵ', 'Ⅶ', 'Ⅷ', 'Ⅸ', 'Ⅹ', '㍉', '㌔', '㌢', '㍍', '㌘', '㌧', '㌃', '㌶', '㍑', '㍗', '㌍', '㌦', '㌣', '㌫', '㍊', '㌻', '㎜', '㎝', '㎞', '㎎', '㎏', '㏄', '㎡', '㍻', '〝', '〟', '№', '㏍', '℡', '㊤', '㊥', '㊦', '㊧', '㊨', '㈱', '㈲', '㈹', '㍾', '㍽', '㍼', '∮', '∑', '∟', '⊿', '纊', '褜', '鍈', '銈', '蓜', '俉', '炻', '昱', '棈', '鋹', '曻', '彅', '丨', '仡', '仼', '伀', '伃', '伹', '佖', '侒', '侊', '侚', '侔', '俍', '偀', '倢', '俿', '倞', '偆', '偰', '偂', '傔', '僴', '僘', '兊', '兤', '冝', '冾', '凬', '刕', '劜', '劦', '勀', '勛', '匀', '匇', '匤', '卲', '厓', '厲', '叝', '﨎', '咜', '咊', '咩', '哿', '喆', '坙', '坥', '垬', '埈', '埇', '﨏', '塚', '增', '墲', '夋', '奓', '奛', '奝', '奣', '妤', '妺', '孖', '寀', '甯', '寘', '寬', '尞', '岦', '岺', '峵', '崧', '嵓', '﨑', '嵂', '嵭', '嶸', '嶹', '巐', '弡', '弴', '彧', '德', '忞', '恝', '悅', '悊', '惞', '惕', '愠', '惲', '愑', '愷', '愰', '憘', '戓', '抦', '揵', '摠', '撝', '擎', '敎', '昀', '昕', '昻', '昉', '昮', '昞', '昤', '晥', '晗', '晙', '晴', '晳', '暙', '暠', '暲', '暿', '曺', '朎', '朗', '杦', '枻', '桒', '柀', '栁', '桄', '棏', '﨓', '楨', '﨔', '榘', '槢', '樰', '橫', '橆', '橳', '橾', '櫢', '櫤', '毖', '氿', '汜', '沆', '汯', '泚', '洄', '涇', '浯', '涖', '涬', '淏', '淸', '淲', '淼', '渹', '湜', '渧', '渼', '溿', '澈', '澵', '濵', '瀅', '瀇', '瀨', '炅', '炫', '焏', '焄', '煜', '煆', '煇', '凞', '燁', '燾', '犱', '犾', '猤', '猪', '獷', '玽', '珉', '珖', '珣', '珒', '琇', '珵', '琦', '琪', '琩', '琮', '瑢', '璉', '璟', '甁', '畯', '皂', '皜', '皞', '皛', '皦', '益', '睆', '劯', '砡', '硎', '硤', '硺', '礰', '礼', '神', '祥', '禔', '福', '禛', '竑', '竧', '靖', '竫', '箞', '精', '絈', '絜', '綷', '綠', '緖', '繒', '罇', '羡', '羽', '茁', '荢', '荿', '菇', '菶', '葈', '蒴', '蕓', '蕙', '蕫', '﨟', '薰', '蘒', '﨡', '蠇', '裵', '訒', '訷', '詹', '誧', '誾', '諟', '諸', '諶', '譓', '譿', '賰', '賴', '贒', '赶', '﨣', '軏', '﨤', '逸', '遧', '郞', '都', '鄕', '鄧', '釚', '釗', '釞', '釭', '釮', '釤', '釥', '鈆', '鈐', '鈊', '鈺', '鉀', '鈼', '鉎', '鉙', '鉑', '鈹', '鉧', '銧', '鉷', '鉸', '鋧', '鋗', '鋙', '鋐', '﨧', '鋕', '鋠', '鋓', '錥', '錡', '鋻', '﨨', '錞', '鋿', '錝', '錂', '鍰', '鍗', '鎤', '鏆', '鏞', '鏸', '鐱', '鑅', '鑈', '閒', '隆', '﨩', '隝', '隯', '霳', '霻', '靃', '靍', '靏', '靑', '靕', '顗', '顥', '飯', '飼', '餧', '館', '馞', '驎', '髙', '髜', '魵', '魲', '鮏', '鮱', '鮻', '鰀', '鵰', '鵫', '鶴', '鸙', '黑', 'ⅰ', 'ⅱ', 'ⅲ', 'ⅳ', 'ⅴ', 'ⅵ', 'ⅶ', 'ⅷ', 'ⅸ', 'ⅹ', '¦', ''', '"' );
$replace = array('(1)','(2)','(3)','(4)','(5)','(6)','(7)','(8)','(9)','(10)','(11)','(12)','(13)','(14)','(15)','(16)','(17)','(18)','(19)','(20)','I','II','III','IV','V','VI','VII','VIII','IX','X','ミリ','キロ','センチ','メートル','グラム','トン','アール','ヘクタール','リットル','ワット','カロリー','ドル','セント','パーセント','ミリバール','ページ','mm','cm','km','mg','kg','cc','m2','平成' );
$result = str_replace($search, $replace, $subject);
return $result;
}
$test = '①テスト2㍉3日本語のテストです';
$result = replace_kishu_kanji($test);
echo $test;
PHPから動的にPDFを生成し出力やプリントするには古くは【FPDF】を使用しましたが、現在では【TCPDF】を使用します。 TCPDFを利用するメリットは以下のとおり
・文字コード「UTF-8」が使用できる
・TTFフォントを変換しなくても使用できる(自動変換が行われる)
http://sourceforge.net/projects/tcpdf/files/ からダウンロードしてフォルダごとサーバにアップロード
【tcpdf/fonts】の中に【ttf】フォルダを作ってそこにフォントファイルをアップロードします。
デフォルトで入っている「Helvetica」と自分でアップロードした「IPAゴシック」を使ってPDF出力する例
「IPAゴシック」のフォントファイルは http://ipafont.ipa.go.jp/old/ipafont/download.html からダウンロードし
( ./tcpdf/fonts/ttf/ipaexg.ttf )に置いておきます
require_once('tcpdf/tcpdf.php');
$pdf = new TCPDF("L", "mm", "A4", true, "UTF-8" );
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->AddPage();
$font = new TCPDF_FONTS();
// フォント:helvetica
$font_0 = $font->addTTFfont( 'フォントファイルまでのフルパス/helvetica.php');
$pdf->SetFont($font_0 , '', 32,'',true);
$pdf->Text(0, 0, "alphabetica ABCDEFG" );
// フォント:IPAゴシック
$font_1 = $font->addTTFfont('フォントファイルまでのフルパス/ipaexg.ttf');
$pdf->SetFont($font_1 , '', 32,'',true);
$pdf->Text(0, 15, "美しい日本語のフォントを表示" );
$pdf->Output("cd_cover_template.pdf", "I");
ある文章を指定文字数折り返(強制改行)したい時があります。
そんな時に便利なのがSmartyのwordwrapプラグインがありますが、日本語や全角文字には対応していないので使用出来ません。
そこで日本語対応のSmartyプラグイン
(引用元:http://goo.gl/JmZjK にインデント機能を拡張しました。)
<?php function smarty_modifier_unicode_wordwrap($str, $len=80, $break="\n", $indent='' ){ $str = str_replace( "\r", $break, str_replace( "\r", "\n", str_replace("\r\n", "\n", $str) ) ); $str = preg_replace('/(.{'.$len.'})/u', '${1}'.$break, $str); if (strcmp($indent,'')==0){ return $str; } else{ $ar = preg_split("/{$break}/",$str); for($i=0 ; $i<count($ar); $i++){ $ar[$i] = $indent.$ar[$i]; } return join($break, $ar); } } ?>
下記の例だと($my_text を日本語40文字で折り返して各業の文頭に■を追加)となります。
{$my_text|unicode_wordwrap:40:"\n":"■"} 第1引数 : 文字数(デフォルト値:80) 第2引数 : 改行コード(デフォルト値:¥n) 第3引数 : インデント(デフォルト値:ナシ)
です。
なぜか時々文字化けが起きる。。。といった不具合の時は
$encoding = 'UTF-8'; // もしくは EUC-JP , SJIS ini_set('mbstring.internal_encoding', $encoding ); ini_set('mbstring.script_encoding', $encoding ); ini_set('default_charset', $encoding );
これでなおることがあります。
.htaccess に下記の記述をしてサーバにアップロード
php_value mbstring.internal_encoding EUC-JP php_value mbstring.script_encoding EUC-JP php_value default_charset EUC-JP
参考:http://blog.factree.co.uk/memo/000028.html
文字列に「ひらがな(全角)」「漢字(全角)」「カタカナ(全角)」が使われているかを判別するには次のようにする
PHP5 + UTF-8の場合
mb_regex_encoding('UTF-8'); if ( preg_match('/[一-龠]+/u', $q) ){ 漢字を含む時の処理 } if ( preg_match('/[ァ-ヶー]+/u', $q) ){ カタカナを含む時の処理 } if ( preg_match('/[ぁ-ん]+/u', $q) ){ ひらがなを含む時の処理 } if ( preg_match('/[ア-ン゙゚]+/u', $q) ){ 半角カタカナを含む時の処理 }
■ 注意1
正規表現のオプション【 /u 】というのが最後にくっついていますが、
これは文字コード UTF-8 で検索を行うときには必ず必要なものです。
忘れないよう注意!
■ 注意2
また上記の例だと「ー」はひらがなとしてマッチしません。
ひらがなにも「ー」を含ませる場合は
if ( preg_match('/[ー-ん]+/u', $q) ){ ひらがなを含む }
仕方なく mb_ereg で実装する場合は下記の通り
mb_regex_encoding('EUC-JP');
if ( mb_ereg('[一-龠]+', $q) ) { 漢字を含む }
Unicode対応 文字コード表
!JP 付録4 日本語文字一覧
http://jprs.jp/doc/rule/saisoku-1-wideusejp-furoku-4.html
ASCII文字コード一覧表
http://www.psl.ne.jp/perl/pdojo00b.html
memo.xight.org - PHPの文字化け - 5つの誤解と5つの対策
http://memo.xight.org/2007-02-14-1
全角カタカナにマッチする正規表現
preg_match( '/[ァ-ヶ]+/',$text );
参考:Unicode対応文字コード表
http://ash.jp/code/unitbl21.htm
日本語が入った正規表現を使って検索、置換を行うには preg_match , preg_replace を使う
その際文字化けが起こってしまうことが多いが、原因は【/】をエスケープし忘れている
ところにあると思うので、【/】はきちんとエスケープしよう。
mb_regex_encoding('UTF-8'); // もしくは SJIS, EUC-JP
$find_text = preg_quote($find_text, '/');
$string=preg_replace("/($find_text)/", "置換する文字列",$string );
これで文字化けもおこらないと思います。
$string=preg_replace("/($find_text)/u", "置換する文字列",$string );
phpinfo()で【mbstring.language】の項目を見てみる
デフォルトでは【neutral】になっているので mb_string関連関数が動作しない
そこで実行するPHPスクリプトの先頭の方で以下の関数を実行する
mb_language( "ja"); mb_internal_encoding( "UTF-8"); // もしくは EUC-JP(PHPを記述している文字コードを指定)
尚php.iniの設定は
output_buffering = Off
(PHPを記述している文字コードと出力文字コードが違う場合は on にする必要があるが、
文字コード変換はframworkで行うのが望ましいのでとりあえずoffでいい)