引越しました!

http://blog.mogmet.com/blog-entry-39.html

へアクセスしてください。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【PHP】半角英数字の長文を強制改行する【HTML】

HTMLで半角英数などで長い文字列がくると、改行されずにそのまま頑張って表示しちゃってデザインが崩れるってことありますよね。

今回はそれをどうにかブロックの中におさまるように強制的に改行させるという試み。


ブロックの長さに合わせて強制的に改行させる方法としては、
CSSword-break : break-all; と指定するとできたりするが、
いかんせんIEだけの仕様だったりする。
スタイルシートリファレンス > word-break

将来的にはCSS3で採用されるかもしれないとはいってるけど、そんなの待ちきれません。




他には<WBR>タグとかありますが、仕様にない拡張タグらしく、またもIEしか対応してないというトラップ
HTMLタグリファレンス > <WBR>


こうなればサーバ側で処理して改行させればいいやってことで今回はPHPで改行させる処理を考えてみた。
【参考】HTMLで半角英数字の長文を強制改行するメモ

上記の参考サイトは、perlに移植していたのだが、PHPで動くようにちょっとソースを頑張ってみた。


/**
* getBreakLine
*
* @param mixed $values
* @access public
* @return void
*
* @require length
* @require string
*/
function getBreakLine ($values)
{
// 半角英数字が連続して指定文字数以上ある場合に,文字列に改行を挿入
$pattern = '/[\\d\\w!-%\'-\\/:=\\?@\\[-`\\{-\\~]{'. $values['length']. '}/';
$res = preg_match_all($pattern, $values['string'], $match);
var_dump($match);
if ($res) {
// 指定文字列以上のワードがあったら改行する
foreach ($match[0] as $value) {
$pattern = "/{$value}/";
$values['string'] = preg_replace($pattern, "{$value}
", $values['string']);
}
return $values['string'];
} else {
return $values['string'];
}
}
}





使うときはこんな感じ

$values = array(
'string' => 'asf sdfj sdfh TtttTtttttttttttttttt! jhdaaaaaaaaaaaaaaaaajf fh', // 対象文字列
'length' => 19 // 最大文字数を指定
);
$res = getBreakLine($values);




実行結果

asf sdfj sdfh TtttTtttttttttttttt
tt! jhdaaaaaaaaaaaaaaaa
ajf fh"


いい感じで動いてます。

これでとりあえずデザインが崩れることなく安心に生きていけます。

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

スポンサーリンク
FC2カウンター
最新記事
最新コメント
カテゴリ
アマゾンドリンク
検索フォーム
リンク
ブロとも申請フォーム

この人とブロともになる

アクセスランキング
[ジャンルランキング]
コンピュータ
1913位
アクセスランキングを見る>>

[サブジャンルランキング]
未設定
--位
アクセスランキングを見る>>
バックリンク
最新トラックバック
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。