スキップしてメイン コンテンツに移動

投稿

PHP正規表現での処理いろいろ

4バイト文字チェック if ( preg_match( '/[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]/', $value ) ) { return '4バイト文字が含まれています'; } UTF-8で日本語は基本3バイトだけれど、旧漢字?とかあまり日常使わない漢字は4バイトのものがあるよう。 wikipediaによると JIS X 0213 という規格の文字とか こちら の文字とか。 4バイト文字は、 1バイト目 = \xf0-\xf7 2バイト目 = \x80-\xbf 3バイト目 = \x80-\xbf 4バイト目 = \x80-\xbf の文字を指すので上記コードとなる。 参考: https://design215.com/toolbox/utf8-4byte-characters.php 画像ソースを取得 preg_match("/(.*)((http|https):\/\/.*?\.({$validSuffix}))(.*)/i", $elementValue, $aryMatch); $img = $aryMatch[2] HTML要素などの文字列の中から画像ソースを取得するときなどに使用した。 $validSuffixには許容する画像の拡張子を以下のようにパイプつなぎで設定する。 $validSuffix = 'png|jpeg|gif'; $elementValueは検索対象の文字列。 $aryMatchに検索結果が代入され、画像ソースは2番目のサブパターンなので$aryMatch[2]で取得できる。 変換指定\Q...\E $searched_items = preg_grep( '/.*\Q' . $search . '\E.*/', $items ); 上記のようなコードを見たときに\Q, \Eってなんだと思ったので調べると \Q は \E までのメタ文字を無効化するのだそう。 他にも \u は次の1文字を大文字に変換 \l は次の1文字を小文字に変換 \U は \E までの文字を大文字に変換 \L は \E までの...

Xdebug3をIntelliJで使う

以前メモっておいた手順でXdebugが動かないな、と思ったら Xdebug2からXdebug3になり設定ファイルのプロパティが変わっていたという話。  まずはXdebugをインストール インストールガイド に従ってダウンロードする。 自分はDocker環境だったのでDockerfileに以下を追記した。 >RUN pecl install xdebug \ && docker-php-ext-enable xdebug COPY ./php.ini /usr/local/etc/php/php.ini iniファイルの設定 Xdebug2からの移行については 公式 に説明があった。 以下が自分が設定したXdebug3での値。 [xdebug] xdebug.mode=debug xdebug.start_with_request=yes xdebug.client_host=host.docker.internal xdebug.client_port=9001 xdebug.log=/var/log/xdebug.log xdebug.idekey=PHPSTORM xdebug.client_host=host.docker.internalはDockerでの設定値。デフォルトはlocalhost。 xdebug.client_portで設定したポート番号を intellijの設定画面>Language&Frameworks>PHP>DebugのXdebugの項目に設定する。 xdebug.idekeyに設定した「PHPSTORM」をRun>Edit Configurationsの画面で追加したPHP Remote Debugの中の「IDE key」に設定する。 あとはDocker再起動やphp-fpm再起動を行う。 Dockerだと PHP_IDE_CONFIG という環境変数をエクスポートしないと動かなかった。 export PHP_IDE_CONFIG="serverName=test" ここのserverNameにはIntellijの設定画面>Language&Frameworks>PHP>Serversで設定されているサーバーのどれを使...

SQLのエスケープ処理

SQLのエスケープ処理 検索文字列のエスケープ 使用DBMS:MySQL where句などで、シングルクオートを指定したいときのエスケープ。 たとえば「The Tom’s house」のように所有の「s」の前のアポストロフィーなど。 MySQLの ドキュメント からエスケープする方法は以下のようなものがあります。 「’’」と記述する SELECT * FROM post p WHERE p.title = 'Tom''s house'; バッククォート「」を直前に書く SELECT * FROM post p WHERE p.title = 'Tom\'s house'; 文字列を「“」で囲む SELECT * FROM post p WHERE p.title = "Tom's house"; カラムにハイフンが含まれるとき 多分、そもそもカラム名やテーブル名にハイフンを含めないのが望ましいと思いますが、ハイフンを含まざるをえない時、以下のようなSQLを投げたらエラーが発生しました。 ALTER TABLE post ADD post-white-list VARCHAR(255); エラーメッセージ [42000][1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘post-white-list’… カラム名をダブルクオートで囲ってみる ALTER TABLE post ADD "post-white-list" VARCHAR(255); 同じエラーが出る。。 解:バッククオートで囲む 以下のようにバッククオートで囲んだら実行できました。 ALTER TABLE post ADD `post-white-list` VARCHAR(255); バッククオートは予約語をエスケープするものだと思っていて、あまり使う機会がなかったのですが、このような時も使えるんです...