PHP の preg_replace には u 修飾子をつけた方がいい

サーバーの環境によって PHP の preg_replace に u 修飾子をつけないと日本語文字列が正しく解釈されない場合があります。

例えば、下記のようなコードがあったとします。この正規表現の書き方が良いか悪いかは別として、半角・全角スペースで区切られた文字列の最初の文字列だけを取得しようとしています。

<?php
$searchText = 'かたつむりくんのWWW Movable Type';
$result = preg_replace("/([^  ]+)([  ]+).+/", "$1", $searchText);
echo $result;
?>

想定した結果は「かたつむりくんのWWW」ですが、環境によっては結果が「か」だけになったりします。

これを回避するには、正規表現にパターン修飾子の u を付けて、パターンと対象文字列を UTF-8 として処理するように明示します(文字コードが UTF-8 であるのが前提)。

<?php
$searchText = 'かたつむりくんのWWW Movable Type';
$result = preg_replace("/([^  ]+)([  ]+).+/u", "$1", $searchText);
echo $result;
?>

すると結果は想定通りの「かたつむりくんのWWW」となります。

以上です。

Published 2016-03-14
Updated 2023-03-17