[PHP-users 24004] 表\ の処理

Satto satoru_kumagai @ mjs.co.jp
2004年 12月 28日 (火) 14:55:57 JST


ご教授お願いします.

「表」という漢字等が化ける・・・ということをMLで勉強したことがあり,
htmlspecialchars等で対応しておりました.
が,エスケープ文字も気になり,「\」(円記号)を使用して文字化けの
テストをしていましたが,結果として,「表」を表示させようとすると
「\」がエラーになり,「\」を表示させようとすると「表」がエラーになり,
どっちつかずの状態になってしまいます.

現在,データベースのフィールドに「表\」とテストで入れている状態です.
以下のソースでテストすると,javascript の部分で「終了していない文字です」
といったようなエラーになります.
データが「表」だけの場合,
$title = ereg_replace("\\\\","\\\\",$title);
を外すことでうまくいき,
データが「\」だけの場合,
$title = htmlspecialchars($title,ENT_QUOTES);
を外すことでうまくいきます.

環境
Win2000SV
Apache 1.3.26
PHP 4.3.9

mbstring.language    = Japanese
mbstring.encoding_translation    = On
mbstring.internal_encoding    = SJIS
mbstring.http_input           = auto
mbstring.http_output          = SJIS
mbstring.detect_order         = auto
mbstring.substitute_character = auto
mbstring.script_encoing       = SJIS

以下,サンプルソース
<?php
require_once('dbconnect.inc');
$con = new connect;
$str = "select * from hoge where hoge_id=1";
$rs = $con->rtn_rs($str);
$row = mssql_fetch_array($rs);
$title = $row["title"];
$title = htmlspecialchars($title,ENT_QUOTES);
$title = ereg_replace("\\\\","\\\\",$title);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<META http-equiv="Content-Style-Type" content="text/css">
<TITLE>HOGE</TITLE>
<script language="javascript" type="text/javascript">
function hoge(){
 alert("<?php echo($title)?>");
}
</script>
</HEAD>
<BODY oncontextmenu="return false" bgcolor="#FFFFFF" onload="hoge()">
TEST
</BODY>
</HTML>

以上,よろしくお願いします.


PHP-users メーリングリストの案内