[PHP-users 15379]Re: eregiのつかいかた
Osamu Shigematsu
m5issige @ mr.hitachi-medical.co.jp
2003年 5月 19日 (月) 18:37:25 JST
重松です。こんにちは。
> <?php
> // 漢字コードはEUCです
> $str = '<font size=-1 color="#ff0000">てーすとー</font>' ;
> print $str;
> print "<br>\n";
> print html_entity_decode($str);
> ?>
これって、今回のケースでは、たぶん役立たずです。
htmlspecialchars() の逆としか読めないんですが?
で、PUYO さんへ:
気軽に発言してもらってもいいんですけど、
最低限のマナーってありますよね。
例えば、どこの誰と名乗るとか。
技術的なことでは、スレッドをきらないとか。
こういう暗黙のルール/マナーは、逆説的にいえば、
気軽に発言するためにあるのではと思います。
メールを読む人は、見ず知らずのまったくの他人ということをお忘れなく。
そして、自分以外のほかの人のメリット/幸せも考えましょう。
あと、いろいろ思うところはあるのですが、単に置換するだけでは、
他の問題を誘発する可能性があるので、たたき台になるコードを書いてみました。
ここでいう問題とは、
(1) タグを故意に閉じない
(2) やたら大きな文字を指定し、レイアウトを乱す
(3) 背景色と同じ色を指定したりする嫌がらせ
をさくっと受け付けますね。>PUYO 氏
この程度のことは予見できるわけだから、単に置換のコードを聞かれて、
それをそのまま書くようではなんというか、(以下自粛)。
# 問題にぶつかることを予見していても、その問題を示さない、
# それって、結構罪ではない?
まあ、情けは人のためならず、ということで、PHP 4.2.3RC2 で動作確認済み。
(要 mb_ereg)
コメントはつけてませんけど、上記 (1) -- (3) 位に対しては、
不完全ながらもヒントは示したつもり。
ニーズ/環境に基づいて改造してみてください。
<?php
$str = "xxxx xxx<font size=\"10\" color='red'>yyy yyy</font>zzz zzz";
//$str = "xxxx xxx<font color=\"red'>yyy yyy</font>zzz zzz";
if (mb_ereg('<[Ff][Oo][Nn][Tt](.*?)>(.*?)</font\s*>', $str, $matches)) {
var_dump($matches);
$tag = array('font');
$elements = mb_split('\s+', trim($matches[1]));
var_dump($elements);
foreach($elements as $element) {
list($key, $val) = explode('=', $element);
print "$key => $val\n";
$key = strtolower(trim($key));
$len = strlen($val);
if ($len > 2 && ($val[0] == '"' || $val[0] == "'")) {
if ($val[0] != $val[$len - 1])
continue;
$val = '"' . substr($val, 1, -1) . '"';
}
switch ($key) {
case 'color':
$tag[] = "$key=$val";
break;
}
}
$tag = implode(' ', $tag);
$str = str_replace($str, $match[0], "<$tag>{$matches[2]}</font>");
echo $str;
}
else {
die('no match');
}
?>
実行例:
> php -q test.php
array(3) {
[0]=>
string(54) "<font size="10" color='red'>yyy yyy</font>"
[1]=>
string(22) " size="10" color='red'"
[2]=>
string(7) "yyy yyy"
}
array(2) {
[0]=>
string(9) "size="10""
[1]=>
string(11) "color='red'"
}
size => "10"
color => 'red'
<font color="red">yyy yyy</font>
--
Osamu Shigematsu <m5issige @ mr.hitachi-medical.co.jp>
PHP-users メーリングリストの案内