delicious! newsing! buzzurlにブックマーク! Yahoo!ブックマーク ライブドア - この記事をクリップ! このエントリーを含むはてなブックマーク

php :: 10進数と16進数の数値文字参照が混在する文字列を10進数のみに統一する

2009/4/25 (Sat) at 2:39 pm

エントリのアイコン

お客様からドバッとテキスト原稿を頂いて「チャチャッとやっときますわ!」と調子よく答えて、あとから中身をよく見たら、欧文の特殊文字の部分において、10進数と16進数のNumeric Character References(数値文字参照)が混在していることに気づいた!このままDBに入れちゃうと検索するときにめんどくさいことが起こるので、どちらかに統一せねば。「どしよう!」と焦りつつも「こういうときのために正規表現があるのだ〜」と関数をつくりました。できたー。両者が混在する文字列を渡すと、16進のぶぶんを10進表記に置き換える関数です。つまり、

Gárcía O'Keeña

という人名があったとして、これは次に挙げるどれで書いてもブラウザからはおなじに見えるんだけど↓

Gárcía O'Keeña
Gárcía O'Keeña
Gárcía O'Keeña
Gárcía O'Keeña

※青文字が10進、赤文字が16進。

じっさいには違う文字列であるから、このままでは具合がわるいので、青文字である10進表記に統一するという機能の関数がコレです↓

preg_replace_callback()関数ってべんりですよね。私はコレを知らなかったころには、preg_replace_allでマッチする部分の文字列を抜き出して、foreachで回して〜という風にやってましたが、コレを知って以来、人生がらくになりました。まだやってない方はどうぞトライしてみてください。

ふたつめの引数に関数を渡すのですが、上のサンプルではcreate_functionで匿名関数になっていますが、functionナンチャラで定義した関数も渡せます。上の例をそれでやるとこんな風になります↓

delicious! newsing! buzzurlにブックマーク! Yahoo!ブックマーク ライブドア - この記事をクリップ! このエントリーを含むはてなブックマーク

コメント・プリーズ!

お名前 (your name)
(required)
url
(optional) ※公開されます。
メールアドレス (email)
(optional) ※公開されません。管理者にだけわかります。
コメント (comment)
(required)

※クッキーに保存すると次回から入力を省略できるので便利ですが、お使いのコンピュータに情報が残りますので、公共のパソコンなどからアクセスするような場合はチェックをはずしたほうがよいでしょう。

※コメント中のhtmlタグは実体参照に変換されます。たとえば、『<』は『&lt;』というかんじになりますのでhtmlタグをそのまま書き込んでくださってオッケーです。

one-px-ffffff-tl one-px-ffffff-tr one-px-ffffff-bl one-px-ffffff-br

PROFILEcaption

藤居ヒロヤ。ウェブデザイナー/ウェブディレクター。ウェブデザインオフィス、3OT NET主宰。名古屋市中区。「優しいデザイン」「激しいデザイン」「正しいデザイン」「セクシーなデザイン」「泣けるデザイン」「もっともなデザイン」... 。あなただけのウェブデザインを丹精込めておつくり致します。見積り依頼等、お気軽にお問い合わせ下さい。

お問い合わせフォーム

RECENT ENTRIEScaption

RECENT COMMENTScaption

TOOLScaption

BOOKMARKScaption

RESOURCEScaption

ARCHIVEcaption