0

重複の可能性:
終了していない文字列リテラル

次の関数で og:description を設定する際に問題があります...

function createFacebookMeta($title, $fcUrl, $fcImg, $fcDesc){    
    $fcDesc = (strlen($fcDesc) > 100) ? substr($fcDesc,0,150).'...' : $fcDesc;
    $faceBook = "<script type=\"text/javascript\">


$(document).attr('title', '".$title."');
$('meta[property=\"og:title\"]').attr('content', '".$title."');
$('meta[property=\"og:url\"]').attr('content', '".$fcUrl."');
$('meta[property=\"og:image\"]').attr('content', '".$fcImg."');
$('meta[property=\"og:description\"]').attr('content', '".$fcDesc."');
FB.XFBML.parse();
</script>";
echo $faceBook;
}

応答として、私はfirebugに入ります

未終了の文字列リテラル

 $('meta[property="og:description"]').attr('content', 'Logos gedruckt<br />  //breaks here

ストリップタグを使用しても同じレポートが表示されます... og:description を設定しない場合、デフォルトのメタ記述が取得されます (ここでは np)。これはほぼ同じ長さです。

ありがとうございました

$fcDesc はデータベースの結果です

$fcDesc = "Logos gedruckt
<br>
100% Baumwolle
<br>
Vorne: Logo
<br>
Rücken: Cash Ruls";

(製品説明)

4

1 に答える 1

1

コードを壊すような方法で、文字列を JavaScript コードに出力しています。

これは、javascript の PHP 値を適切にエンコードしていないために発生します。

これを行う簡単な方法は、次のjson_encode()関数を使用することです。

$faceBook = '<script type="text/javascript">
$(document).attr(\'title\', ' . json_encode($title) . '); ....';

PHP 変数の値を JavaScript 用にエンコードする必要がある場合はいつでも使用してください。JSON は JavaScript のサブセットであるため、これは非常にうまく機能します。

さらに、説明文字列を簡略化することもできます。

$simplified = preg_replace('/\s+/', ' ', strip_tags($fcDesc));

<br>これにより、そこにあるHTML タグが削除され、空白が正規化されます。

また、実際に見てみましょうjson_encode

echo json_encode($simplified), "\n";

出力:

"Logos gedruckt 100% Baumwolle Vorne: Logo R\u00fccken: Cash Ruls"

ご覧のとおりjson_encode、 は引用符を追加するだけでなく、文字列内の文字を Unicode シーケンスに適切にエンコードします。

元の文字列には改行がありました。JavaScript では、文字列に改行を含めることはできません (PHP では使用できますが、JavaScript では使用できません)。元の文字列で使用json_encodeすると、それも修正されます。

"Logos gedruckt\n<br>\n100% Baumwolle\n<br>\nVorne: Logo\n<br>\nR\u00fccken: Cash Ruls"

ご覧のとおり、改行は\n出力のように正しく書き込まれています。覚えておいてjson_encodeください。javascriptタグに入れるすべての変数に使用してください。これにより、コードが安定します。

于 2012-11-06T19:56:39.497 に答える