2016-06-17 21 views
-2

CMSからテキストが生成されているため、出力される文字列を制御できません。PHP:二重引用符を置換する

私は二重引用符を単一のものに置き換えるためにあらゆる種類のPHP関数を試しましたが、役に立たないものです。誰もが解決策を提案できますか?

<?php 
$comments = str_replace('"', "'", ("6:00 pm , practiced "Zen' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed)"); 

echo $comments; 
?> 

エラーメッセージ:

Parse error: syntax error, unexpected 'Zen' (T_STRING) in 

テンプレートから完全なコードの追加:

{exp:query 
    sql="SELECT 
    t.entry_id, 
    entry_date, 
    field_id_4 as tunnel, 
    field_id_2 as log_time, 
    field_id_17 as log_video, 
    field_id_18 as log_comments 
    FROM exp_channel_data d, exp_channel_titles t 
    WHERE t.channel_id = 7 
    AND t.status != 'Delete' 
    AND author_id = '{embed:member_id}' 
    AND t.entry_id = d.entry_id 
    AND field_id_19 = '' 
    ORDER BY entry_id DESC" 
} 
    <?php 
    //strip out Playa bumph from our tunnel 
    $tunnel = substr(strrchr("{tunnel}","]"),2); 
    preg_match_all("/\[[^\]]*\]/", "{tunnel}", $matches); 
    $tunnel_id = trim($matches[0][0],'[,]'); 

    $time[] = array(
     "entry_id" => "{entry_id}", 
     "tunnel" => $tunnel, 
    "tunnel_id" => $tunnel_id, 
     "entry_date" => "{entry_date}", 
     "log_time" => "{log_time}", 
     "log_video" => "{log_video}", 
     "log_comments" => "{log_comments}"); 
    ?> 
{/exp:query} 

<script> 
    IBA.logged_time = <?php echo json_encode($time); ?> 
</script> 

log_commentsは問題です。

+1

コードの書式設定を見てください... – Rizier123

答えて

1

文字列リテラルで二重引用符をエスケープする必要があります。あなたが削除する必要がumatched左括弧もあります:

<?php 
$comments = str_replace('"', "'", "6:00 pm , practiced \"Zen' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed)"); 

echo $comments; 
?> 

出力:

6:00 pm , practiced 'Zen' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed) 

編集:あなたはより多くのコードを掲載しましたので、私は何が起こっているかを参照してください。次のコードを試してください。コンテンツの中に "LOG_COMMENTS \ n"がある場合を除き、それは動作します。

$time[] = array(
    "entry_id" => "{entry_id}", 
    "tunnel" => $tunnel, 
    "tunnel_id" => $tunnel_id, 
    "entry_date" => "{entry_date}", 
    "log_time" => "{log_time}", 
    "log_video" => "{log_video}", 
    "log_comments" => <<<LOG_COMMENTS 
{log_comments} 
LOG_COMMENTS 
); 

それでも、これは非常に貧弱なデザインです。 CMSがデータベースまたはプレーンテキストファイルにデータを保存できない理由はありますか?

+0

それは問題です、私は文字列を制御することはできません。私はそれをエスケープしようとしましたが、どちらもうまくいきませんでした。 – KoalaKid

+0

どこから文字列を取得していますか? – ShiraNai7

+0

CMSなので、何が生成されるのか制御できません。 – KoalaKid

0

編集{log_comments}

{addslashes(log_comments)}にあなたは、建物の過程にある、あなたの文字列の入力をエスケープする必要があるか、その文字列は、それ自体は不正な引用符によって分割されます。

What it means to escape a string

は、おそらくいくつかの変数内のこれらのテキストを取得する必要がありますdocs

+0

私はそれを試みました。私はこれが信じられないほどシンプルでなければならないことを知っている、私は100回これをしたにちがいないが、それはちょうどエラーを蹴飛ばし続けている。 – KoalaKid

+0

その後、エラーをトレースして戻します。エラーを私たちに読んでください。エラーから十分なフィードバックが得られず、行番号と列が何であるかを伝える必要がある場合は、コードを複数の行に分割します。この時点であなた自身の問題を解決できるのはあなただけだと思う​​が、ここでの問題の要点は、入ってくる文字列をエスケープする必要があるということだ。 – Jonathan

+0

合意。私はそれを問題の文字列の1つを含む単なるPHPファイルに分割し、考えられるすべての種類のPHP関数を試しました。 – KoalaKid

0

を参照してください。 まず、構文ミスをしていないことを確認してください。あなたがブラウザからそれらのテキストをコピーしてstr_replace()に配置したいからかもしれません。 このように引用符をエスケープする必要があります。

$comments = '("6:00 pm , practiced "Zen\' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed)"'; 

スラッシュを使用します。 次に、あなただけがあなたのコードあなたがそう最初にHTMLエンティティに特殊文字を変換し、この

$comments = '("6:00 pm , practiced "Zen\' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed)"'; 

$com = htmlspecialchars ($comments); 

$replacedText = str_replace("&quot;","&#039;",$com); 

echo $com; 

echo "<br/>"; 

echo $replacedText; 

のように行うことができます

$comments = str_replace('"', "'", '("6:00 pm , practiced "Zen\' flying and sit carving (one leg down) and back carving and sit-to-sit front flip (weight require slower wind speed)"'); 

OR でその部分を使用することができます。 htmlspecialchars その後、str_replace関数を使用して見積もりを簡単に置き換えることができます。

あなたはあなたが間違っていたところに行ってくれることを願っています。

関連する問題