[PHP-users 12385] Re: print()文での<> の扱い方について

Kumiko ENOMOTO php-users@php.gr.jp
Mon, 30 Dec 2002 15:05:58 +0900


こんにちは。榎本です。
年末のお忙しい時にも関わらず、
ご回答、本当にありがとうございます。

:::::

いわもと様、

> > (<HTML></HTML>タグで囲っていないのですが・・・)
> <html>エレメントの有無というよりも、
> HTTPヘッダの問題でしょう。
>
> 以下のように、plainテキストであることを指示すれば
> '<','>'を解釈しなくなります。
> #!/usr/local/bin/php4
> <?php
>   header("Content-type: text/plain");
>   $me = "/(<input[^>";
>   print $me;
> ?>

の通りやってみましたら、うまくいきました。
ありがとうございました。

:::::

角様、

> 要件がよく分からないのですが、

そうですよね。一体なぜそんなものをブラウザに表示したいのか、
書くべきでした。すみません。

現在、perlで開発されたシステムをphpで再構築しているのですが、
大元の問題は、preg_replace()がうまく動作しないということでした。

こちらは単に勉強不足の私の文法間違いだと思うので、
私が与えている変数の中身が間違っているのではないか・・・と、
その変数の中身をprint()文で確認しようとしたところ、
print()文の<>の問題にぶつかってしまったというわけです。

$myfile= "<input name=\"check_xxx\" value=\"1\">";
$key = "chk_xxx";
$value="1";
$me = "/(<input[^>]+name=\\\"" . $key . "\\\"[^>]+value=\\\"" . $value .
"\\\"[^>]*>)/si";
preg_replace($me, "\\1. checked>", $myfile);

のプログラムなのですが、
<input name="check_xxx" value="1">
という文を、単に、
<input name="check_xxx" value="1" checked>
にしたいだけのですが、
それがどうもうまく動作しません。

私の文法ミスであることは間違いないので、
preg_replace()部分まで詳しく書くことを避けたのですが、
それでは、確かに、みなさんに要件がよくわからなかったですよね。
なんで、"/(<input[^>" などと表示したいのだ、、と。

print()文の問題が解決しましたので、
引き続き、本問題の解決にとりかかることができます。

ご紹介のURL、早速拝見しました。
> http://www.asahi-net.or.jp/~hi5k-stu/compt/gt_lt.htm

なんて単純な初歩的な問題だったのですね。
お恥ずかしい・・・

:::::

Noz様

> 単純にhtmlの問題だと思います。
> htmlでは"<"をそのまま記述するとタグの開始とみなされるので
> 文字参照で記述しないと表示されません。
>
> phpにはhtmlの特殊文字を自動変換してくれる
> htmlspecialcharsという関数があるのでそちらを利用してみて下さい。
>
> 例えば
>
> #!/usr/local/bin/php4
> <?php
>   $me = "/(<input[^>";
>   print htmlspecialchars($me);
> ?>
>
> とか。

こちらでもうまくいきました。
htmlspecialchars()
という文字列関数の存在を知らなかったので勉強になりました。
今後デバッグにかなり役に立ちそうです。
HTML変換の時にも役に立ちます。

ありがとうございました!

:::::


■ ENOMOTO Kumiko
■ yhe10046@nifty.com