重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

nl2br関数やsession_trans_id設定など、
PHP側で自動でタグを出力する関数において、
デフォルトで、<br />や<input />などXHTML形式になっています。

これを<br> <input>など旧来のHTML形式にする方法はないでしょうか?

A 回答 (5件)

セッションの方は一部分だけ置き換えるのではなく


DBなどを使ってセッションシステムを作成する
ソースを変更するよりかなり簡単だと思うけど

No.4までを読むと
簡単な方法が二つほど思いつく
良いヒントが書かれている

この回答への補足

ご回答ありがとうございます。
ちょっと私の説明不足が多々あったようでして、補足です。
前述のとおり、今回はケータイサイトでして、

UserAgentなどから端末IDなどを引っこ抜いて自作セッションハンドラで
セッション管理する案はあるにはあったのですが、
1リクエスト単位で端末ID送信許可をユーザに求めるので、
現実的ではありませんでした。

セッションIDを持ちまわすなら自作セッションハンドラでは
根本的に解決はしないのです。


nl2brなどは自作関数に置き換えれば済む話ですが、

session_trans_idに関しては、
わざわざセキュリティレベルを下げてまで
URL-Rewriter出力ハンドラを使う理由は
「cookieを禁止している、または使用できないブラウザにおいて
<a>タグ、<form>タグでセッションIDを埋め込む作業が自動化できないか?」
というところでして、

もちろんPOST,GETにセッションIDを埋め込むのは、
当然セキュリティ上好ましくないので、気持ち程度のセキュリティアップに
接続ごとにsession_regenerate_id()を噛まします。

テンプレートエンジンにCOOKIEの使用可、不可を見分けて
<a>タグ、<from>タグを自動変換するように追加仕様を加えれば
実現はできると思います。

コスト的に考えて
PHPのsession_trans_id機能を使ってできればそれに越したことはない。

というのが質問のポイントでした。

補足日時:2005/08/02 14:23
    • good
    • 0

nl2br();などの関数の結果にさらに置換をかけてみたら?


ex.
$string = nl2br($data);
$pattern = "'\s/>'s";
$replacement = ">";
$outstring = preg_replace($pattern, $replacement, $string);

これをサブルーチンにしておけば楽できそうだけど?

参考URL:http://jp2.php.net/manual/ja/function.preg-repla …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
下記のお礼でも述べたとおりnl2br()は自作すれば
解決する話ですね

お礼日時:2005/08/02 14:01

>自動でタグを出力する関数


あれこれ悩むより、<br> 等の /を含まないように出力する関数を作ったほうが手っ取り早いかと思います
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
下記のお礼でも述べたとおりnl2br()は自作すれば
解決する話ですよね

お礼日時:2005/08/02 14:01

php.iniを見直してみましたがタグの設定はなさそうですね。


ソースコードを修正して自分でコンパイルしなおせば不可能では無いと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

まぁnl2brは自作すればいい話ですが、
session_trans_idの場合は、
URL-Rewriterハンドラの設定は変更できるようですが、
タグ形式は固定・・・
<input type="hidden" name="***" value="****" />

出力用のカスタムハンドラは作れない・・・

かといってURL-Rewriterをソースから作り直すのは、
コストもかかりますし、現行サーバで・・と言うわけには行きませんし
ここに質問した次第です。

HTMLエンティティとかは変換テーブルをカスタマイズできるのに・・

やっぱりシンプルに解決する方法はないんですかねぇ・・・

お礼日時:2005/07/29 16:34

将来的にXHTMLが標準になることを見越して、 <br />等の空要素タグは />でタグ内で終了させるようにしたほうが良いと思います


また、各タグも小文字が標準になりますし、閉じる必要のあるタグは記述する順番や必ず閉じる必要があるなど、いままでいいかげんに記述してきてもなんとなく動いていたが将来は動かなくなる可能性もあります
今のうちになれておいたほうが良いと思います。

現在のブラウザでも問題なく動作しますので旧方式にする必要性はないと思います


それとも旧方式でないと不具合があるのでしょうか?

この回答への補足

別にXHTMLが技量的に使えないわけではなくて、

現在、携帯サイトをを構築中でして、
割と古い携帯まで対応することになりました。
そこで出力テンプレートをCHTMLとXHTMLと
2つ用意する仕様になりました。

まだ各キャリアのシュミレータでしか実験していませんが、

確かにPC上のブラウザや最近のXHTML対応携帯、
PDAのフルブラウザでは困りませんが、
i-mode向けHTML(拡張CHTML)であればエラーも警告も出ませんが、
vodafone live!向けHTML(CHTML互換MML?)では
XHTML式に<br /><input />では警告がでます。

i-modeもvodafoneも最新機種はフルブラウザや
XHTML互換になってきているとはいえ、
まだまだCHTMLベースで端末制限などがある
低機能ブラウザ搭載のものも多々あります。
(そんなの使ってる人はWebサイトなんて見ないと思いますが・・・)

データが飛んだり、セッション管理に異常をきたすかもしれない
不安要因が今回のXHTML仕様のタグでして、、、

今後不要と切り捨てるのは簡単ですけどね(^^;)

補足日時:2005/07/29 13:32
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!