スレッド表示 | フラット表示〕 全トピック 920 件中 106 番目 次≫ ≪前

ダブルクォーテーションが重なった

created: 2007-07-04 22:28 | modified: 2007-07-06 14:15 | reply: 5

[3797] ダブルクォーテーションが重なった

user: 里美 | created: 2007-07-04 22:28
以前お世話になった里美です。

また、わからない事があるので教えて下さい。

item.csvにバナータグを入れた所、その部分に"ダブルクォーテーション"が挿入された状態になっています。

要するにバナータグの所は ”×” このような感じです。

ソースを見たところダブルクォーテーション ”が””このように重なってしまいました。

<a href=""http://・・・"" target=""_blank""><img src=""http://・・・"" border=""0""></a>

何がいけないのでしょうか?

<?php
$C=$_GET["c"]; //クエリからパラメータを取得
$DATA=file("item.csv"); //CSVファイルを1行1要素で配列に読み込む
$CAT_DATA=file("cate.csv"); //カテゴリ用CSVファイルを読み込む

//CSVファイルからページデータを獲得する関数
//@引数 $id :ページID
//@戻り値 array :ページデータ
//(該当するIDがなければ空の配列を返す)

function getPageRecord ( $id )
{
$filename = 'cate.csv'; // CSVファイル名
$maxlen = 1024; // 1行の最大長(バイト)

$record = array();
if ($fp = fopen($filename, 'r')) {
while ($rec = fgetcsv($fp, $maxlen, ',')) {
if ($rec[0] == $id) {
$record = $rec;
break;
}
}
fclose($fp);
}
return $record;
}

//ページデータ獲得
$page = getPageRecord($_GET['c'])
//獲得したデータのレイアウト
?>

<?php
if($C){

print"<head>\n";

print"</head>\n";
print"<body>\n";

for($i=sizeof($DATA)-1;$i>=1;$i--){ //$DATAの要素を一つずつ読み込みながら以下の処理を行う
$line=explode(",",$DATA[$i]); //1要素をさらにカンマで分解し配列に格納
if($line[1]==$C){ //もしパラメータとカテゴリ番号が一致すれば表示
print"<table width='90%' class='shop'><tbody><tr><td align='center' width='20%'>{$line[3]}</td><td width='60%' colspan='2'><p>{$line[2]}<br>{$line[7]}</td></tr></tbody></table>\n";
}
}

}else{

print"<head>\n";
print"</head>\n";
print"<body>\n";

}
?>

</body></html>
reply: 3798 返信 編集 削除

[3798] "のエスケープ処理

user: ゆうじ | created: 2007-07-05 16:43
こんにちは。

CSVファイルに保存する際、
何らかのエスケープがされてると思いますので、
item.csv にはどのように格納されてるか
実際の値をテキストエディタで確かめてください。

あとは、item.csv を読み込んだところで
エスケープされてる " を元の " に戻せば良いわけです。
Parent: 3797  reply: 3799 返信 編集 削除

[3799] Re."のエスケープ処理

user: 里美 | created: 2007-07-05 18:52
お返事ありがとございます。

item.csv はエクセルで作っていて、テキストエディタで開いたところバナータグの所だけ
","<a href=""http://・・・"" target=""_blank""><img src=""http://・・・"" border=""0""></a>",
このようになっています。他は
ID,カテゴリID,,,このようになっています。

ちなみにエスケープと言うのがよくわかりません。
どうしたらいいのでしょうか?
Parent: 3798  reply: 3800 返信 編集 削除

[3800] エスケープ処理とは

user: ゆうじ | created: 2007-07-05 20:45
>どうしたらいいのでしょうか?

どうしたいのでしょう?
キーワードがわからないなら
検索エンジンという便利なものがありますんで
「エスケープ処理」で検索するとか
わからないなりに自分でやれることはやった上で
わからないことをご質問下さい。


エスケープ処理は、
あるデータ形式の中で、特殊な役割を持つ文字を
単なる文字データとして扱うため、
該当する文字の前に別の文字を付加したり、
まったく別の文字に置き換えたりする処理のことです。
データ形式によってエスケープの方法はさまざまです。

例えば、HTMLで < や > は
タグをあらわす特殊文字なので
これをただの文字として扱いたい場合
&lt; や &gt; で置き換えますよね。

これと同じようなことがCSVにもあり
CSVで特殊な役割を持つ文字は以下の3種類です。
1.レコード区切りの 改行コード
2.フィールド区切りの ,(カンマ)
3.文字フィールドを囲む
"(ダブルクォーテーション)又は '(シングルクォーテーション)

" は特殊文字なので、エクセルでは
文字データとしての " を表すのに
" を連続し "" として表してるようですね。
Parent: 3799  reply: 3801 返信 編集 削除

[3801] Re. エスケープ処理とは

user: 里美 | created: 2007-07-06 11:42
何度もすいません。

私がやりたいのは
""を"の表示にしたいのです。

エスケープ処理で検索したのですが、""を"にするような記事が見つかりませんでした。

お忙しいところすいませんがよろしくお願いします。
Parent: 3800  reply: 3802 返信 編集 削除

[3802] 特定の文字列を別の文字に置き換え

user: ゆうじ | created: 2007-07-06 14:15
特定の文字列を別の文字に置き換える関数があります。
これで可能かと思います。
よく使うので、マニュアルを良く読んで
身に付けておくと良い関数です。

str_replace
http://jp.php.net/manual/ja/function.str-replace.php
Parent: 3801  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 106 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑