🙄

ハイフンに種類が沢山あったのでPHPで半角ハイフンに統一するサンプル

2021/04/07に公開2

概要

WEBサービスでフォームを受けつけているとデータベースにハイフンが入力される。
文字コードが指定されているのに、なぜか色々なハイフンが入ってきてしまう現象があります。

なんとかして統一できないものか

そこで、PHPのサンプルコードを作成してみました。調べてみるとハイフンの種類がいくらでも出てくるのでまだ未知のハイフンがあるかもしれません。

<?php

/*********
 * 日本語のハイフンを半角ハイフンに統一する
 * {Unicode}
 * -:{002D}:半角ハイフン
 * ⁻:{207B}
 * ₋:{208B}
 * ‐:{2010}
 * ‒:{2012}
 * –:{2013}
 * —:{2014}
 * ―:{2015}
 * −:{2212}
 * ─:{2500}
 * ━:{2501}
 * ➖:{2796}
 * ー:{30FC}
 * ㅡ:{3161}
 * -:{FF0D}
 * ー:{FF70}
 */

 // sample code
$text = '|⁻|₋|‐|‒|–|—|―|−|─|━|➖|ー|ㅡ|-|ー|';
$ConvertHyphenClass = new ConvertHyphenClass();
echo $ConvertHyphenClass->convert_hyphen($text);

class ConvertHyphenClass {

    private $target_regexs  = '/[\x{207B}\x{208B}\x{2010}\x{2012}\x{2013}\x{2014}\x{2015}\x{2212}\x{2500}\x{2501}\x{2796}\x{30FC}\x{3161}\x{FF0D}\x{FF70}]/u';
    private $result_regex = '-';

    function convert_hyphen($text){
        $input_text  = mb_convert_encoding($text,'UTF-8','auto');
        $retrun_text = preg_replace($this->target_regexs,$this->result_regex,$input_text);
        return $retrun_text;
    }
    
}

?>

ざっくり説明すると

  1. 入力された文字コードを「UTF-8」に統一する
  2. Unicodeのコードで正規表現を使って置き換える
  3. 変換した後のテキストを返す
    ※使い方のサンプルもつけました。

最後に

ハイフン問題は、どうやって入力されてくるのかわからない根深さを感じますが、フォームで事前に変換しておいたりデータベースに入っているハイフンをコンバートしておくなりというのも必要になるのかなと思います。

GitHubで編集を提案

Discussion