【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

英語では期待通り動くのですが、日本語では期待通り動きません。
なぜですか。

form.html

<html>
<head>フォーム</head>
<body>
<form action="henkan.php" method="post">
文章<input type="text" name="UKETORI"><br>
<input type="submit" value="送信"><br>
</form>
</body>
</html>

henkan.php

<html>
<body>

<?php
$uketori=$_POST['UKETORI'];
$uketori=str_replace("です。","だよん。", $uketori);
print "$uketori";
?>
</body>
</html>

日本語を変換したい場合はエンコードとか必要なのでしょうか。
やり方がわかりません。宜しくお願いいたします。

A 回答 (4件)

むむ。


php.iniの設定を同じにして私の手元の環境でやってみたところ、上手くいきますね。
PHP4、PHP5共に試しました。
送られてくるPOSTデータが実はSJISで無いとかかな?
POSTデータにmb_convert_encodingとか掛けてみてはどうでしょう?

=====試験コード
<?php

// ttp://***.jp/test.php?str=%22%83e%83X%83g%82%C5%82%B7%81B%82%D9%82%B0%22
// で、アクセス。
// URLエンコード部分は「テストです。ほげ」
$str = $_GET['str'];

echo "str_replace: " . str_replace("です。","だよん。", $str) . "<br>\n";
echo "<br>\n";

echo "mb_ereg_replace: " . mb_ereg_replace("です。","だよん。", $str) . "<br>\n";
echo "<br>\n";

?>
=====

=====試験結果
str_replace: テストだよん。ほげ

mb_ereg_replace: テストだよん。ほげ
=====
    • good
    • 0

>mbstring.internal_encoding = EUC-JP


としているのですから、ソースファイルはeucで保存して下さいね。
でないとソース内記述文字列と、入力から得た文字列とを一致させることは出来ません。
>文字コードはシフトJISだと思います。エクリプスで作っております。
eclipseなら、ソース保存時の文字コードを選べるはずですけど。
>;mbstring.func_overload = 0
コメントを外してないので default 0 だったはず、つまりmb_関数が使えるようになってないと思う。
phpinfo()ではどのようになってますか?
    • good
    • 0

> 期待通り動きません。



どんな風になってしまうのでしょうか。

php.iniの[mbstring]セクションの設定内容を全部教えてください。
また、form.htmlとhenkan.phpの文字コードも教えてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。

文字が変換されずにそのまま表示されてしまいます。
です。という文字を入れたら変換されて だよん。 と表示させたいのですがそのまま です。 と表示されます。 英語だとちゃんと変換されました。

php.ini の内部です。

[mbstring]
; language for internal character representation.
mbstring.language = Japanese

; internal/script encoding.
; Some encoding cannot work as internal encoding.
; (e.g. SJIS, BIG5, ISO-2022-*)
mbstring.internal_encoding = EUC-JP

; http input encoding.
mbstring.http_input = auto

; http output encoding. mb_output_handler must be
; registered as output buffer to function
mbstring.http_output = SJIS

; enable automatic encoding translation according to
; mbstring.internal_encoding setting. Input chars are
; converted to internal encoding by setting this to On.
; Note: Do _not_ use automatic encoding translation for
; portable libs/applications.
mbstring.encoding_translation = On

; automatic encoding detection order.
; auto means
mbstring.detect_order = auto

; substitute_character used when character cannot be converted
; one from another
mbstring.substitute_character = none;

; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
;mbstring.func_overload = 0

文字コードはシフトJISだと思います。エクリプスで作っております。

宜しくお願い致します。
文字化けはしません。

お礼日時:2007/07/29 02:28

<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">



とか入れてみたら如何でしょうか。
    • good
    • 0

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


おすすめ情報