SQLServer2000or2005+IIS+PHP5で組まれたWEBアプリケーションの制作に関する質問です。


SQLServer上にNVARCHARあるはNCHAR型のカラムを含むテーブルがあり、
Unicode文字を格納しています。
そこには日本語文字だけではなく、外国語や、SHIFTJISには無くUnicodeにだけある記号(㎐㎠〄など)が使われています。

これをUTF-8上のHTMLに表現するために、SQLServerから読み込んで表示しようとするのですが、文字が化けてしまいます。
ちなみに、日本語については mb_convert_encoding($strMOTOTEXT,"UTF-8","SHIFT_JIS")とすることで何とか表示ができます。
しかし、記号や外国語については表示できません。

何か確実な方法はありますでしょうか?
手段として、NVARCHAR型などを別の型に変換するのもアリです。あと、外字登録はWEBアプリですので事実上無理です。
もしくは、SQLServer+IIS+PHPでマルチ言語対応のページができるUTF-8以外のコードなどがあれば、ぜひご教示下さい。
(SJISやEUC-JPでも多言語表示できるのなら大歓迎です)

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/10/24 17:58:54
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:KUROX No.1

回答回数3542ベストアンサー獲得回数140

ポイント120pt

UNICODEの時に、特定の文字コードをHTMLユニコードに置き換えておく

http://code.cside.com/3rdpage/jp/unicode/converter.html

質問の文字列なら、以下のようにHTMLベースで吐き出せば、SJISでもきちんと

表示されると思います。ローカルで動作確認はしてみたので、いけると思います。

&13200;㎠〄

id:HISI

有難う御座います!シンプルで素敵な方法ですね。

早速明日試してみます。

2007/10/23 23:14:59
  • id:HISI
    お蔭様で、無事にUTF-8でHTML表示することが出来ました。
    以下、サンプルのストアド関数(SQLServer2005で確認)です。

    <blockquote>
    ALTER FUNCTION [dbo].[FN_TO_UNICODE_HTML]
    (
    @vUnicodeString NVARCHAR(2000)
    )
    RETURNS VARCHAR(2000)
    AS
    BEGIN
    DECLARE @vHTML VARCHAR(2000)
    DECLARE @iLen SMALLINT
    DECLARE @iPos SMALLINT

    SET @vHTML=''
    SET @iLen = LEN(@vUnicodeString)

    SET @iPos = 1
    WHILE @iPos <= @iLen
    BEGIN
    SET @vHTML = @vHTML + '&#' + CAST(UNICODE(SUBSTRING(@vUnicodeString,@iPos,1)) AS VARCHAR) + ';'
    SET @iPos = @iPos + 1
    END
    RETURN @vHTML
    END
    </blockquote>

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません