■ このスレッドは過去ログ倉庫に格納されています
【技術者】難しい話をするスレ【Haskell】
- 1 :名無しさん:2014/05/22(木) 00:02:01.28
- 雑談スレで話すとROMっちゃうお嬢様方に配慮して
サーバーやプログラム等の難しい話はこっちでするスレ
- 76 :名無しさん:2014/06/23(月) 12:01:59.29
- c で {} がダメ文字ってのは JSON でデータ扱ってるんかな
素の dat のままでなくその種のもので扱うなら
XML の方が問題起きにくそうだけどなぁ
ユーザが入力した <> は <> に変換されるし
その他文中に入るタグは限られるというか
CDATA セクションに突っ込めばタグも気にしなくていいし
- 77 :名無しさん:2014/06/23(月) 14:36:18.33 ID:7JzZLnV/S
- >>76
簡単に書くと
$raw = file_get_contents(datのURL);
mb_convert_encoding($raw,"UTF-8","SJIS-WIN");
でここまでは正常に表示できて
中身をhtmlspecialcharsしてから
テンプレートエンジンを使用して
表示しているだけです。
- 78 :名無しさん:2014/06/23(月) 14:50:00.39 ID:NuQNw4S1F
- datをUTF8に変換してhtmlspecialcharsしてさらにShift-jisに変換してるって事?
htmlspecialcharsでShift-jis指定のほうがよくない?
- 79 :名無しさん:2014/06/23(月) 15:59:51.99 ID:7JzZLnV/S
- >>78
$raw = file_get_contents(datのURL);
$response = mb_convert_encoding($raw,"UTF-8","SJIS-WIN");
foreach(explode("\n",$raw) as $key => $data){
@list($name,$mail,$day,$hon) = explode("<>",$data);
$name_ss = preg_replace("/\s*?<\/?b>\s*/i","",$name);
$name_s = htmlspecialchars($name_ss,ENT_QUOTES,"SJIS-WIN");
$mail_s = htmlspecialchars($mail,ENT_QUOTES,"SJIS-WIN");
$day_s = htmlspecialchars($day,ENT_QUOTES,"SJIS-WIN");
$title_s = htmlspecialchars($title,ENT_QUOTES,"SJIS-WIN");
$hon_s = mb_convert_encoding($hon,"UTF-8","SJIS-WIN");
@$list[$key]['name'] .= mb_convert_encoding($name_s,"SJIS-WIN","SJIS");
@$list[$key]['day'] .= $day_s;
@$list[$key]['hon'] .= mb_convert_encoding($this->links($hon_s),"SJIS-WIN","UTF-8");
}
function links($txt){
$pat = '/((?:https?|ftp):\/\/[-_.!~*\'()a-zA-Z0-9;\/?:@&=+$,%#]+)/u';
$pat2 = '/<a href="\/test\/read.cgi\/([a-zA-Z0-9]+)\/([0-9]+)\//u';
$pat3 = '/([0-9]+)" target="_blank">/u';
$after = '<a href="\1">\1</a>';
$after2 = '<a href="\1">';
$txts = preg_replace($pat2,"",$txt);
$ret2 = preg_replace($pat3,$after2,$txts);
$ret= preg_replace($pat,$after,$ret2);
return $ret;
}
こんな感じにしてみました。
- 80 :名無しさん:2014/06/23(月) 17:21:28.56
- http://sweet.2ch.sc/test/read.cgi/laplace/1400347531/286
http://c.2ch.sc/test/-/laplace/1400347531/286
状況変わらず
wget -q -O- sweet.2ch.sc/laplace/dat/1400347531.dat | sed -n 286p | php -R 'echo mb_convert_encoding($argn,"UTF8","SJIS-win");'
wget -q -O- sweet.2ch.sc/laplace/dat/1400347531.dat | sed -n 286p | php -R 'echo htmlspecialchars($argn,ENT_QUOTES,"SJIS-win");'
こういうことやっても正常に表示されるし
むしろテンプレートエンジンとやらの方に原因がありそう...
- 81 :名無しさん:2014/06/23(月) 17:50:34.25
- 名前欄でも消えるしテンプレートエンジンか
Smartyとかだと{ }がデリミタだっけ?
テンプレートでevalでも使ってるのかな
- 82 :がんじゃ兄貴 ◆U18g7nxod6:2014/06/24(火) 00:53:44.85 ID:uZ3oSSdVp
- foreachで$rawから展開したデータ入れてる?
$responseでエンコ済みの文字列から展開は出来ないのかな。
処理側がUTF-8のように見えるので・・・・。
見当違いならスマンソ。
- 83 :名無しさん:2014/06/24(火) 07:44:26.83 ID:4MfRC/9KY
- 別のテンプレートエンジンを使った物に書き直した物に入れ替えてみました。
多分、文字化けは解消されたと思います。
# 前は、pattemplateを使用していました。
- 84 :名無しさん:2014/06/24(火) 08:04:00.30
- http://sweet.2ch.sc/test/read.cgi/patisserie/1399111309/239
直ったかな
http://sweet.2ch.sc/test/read.cgi/laplace/1400347531/286-290
http://c.2ch.sc/test/-/laplace/1400347531/286-290
総レス数 356
109 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★