-3

データベースからテキストを取得し、Javascript を使用して表示しようとしています。

これが私のコードです:

while ($row = mysql_fetch_array($result)) {

    $content = nl2br($row['content']);
    echo "<a id=\"details\" onclick=\"show_details('{$content}');\"></a>";
    echo "<script type=\"text/javascript\" charset=\"utf-8\">";
    echo "function show_details(id, title, content) {
        alert(content);
    }";
    echo "</script>";

文字型がutf8_general_ci改行を含む場合、Javascriptが動作しません!

誰でも私を助けてもらえますか?

4

3 に答える 3

0

関数を一度定義し、パラメーターに従います。コンテンツではなく、IDを定義しました。コンテンツは3番目のパラメーターであり、最初のパラメーターではありません。

echo "<script type=\"text/javascript\" charset=\"utf-8\">"; 
echo "function show_details(id, title, content) { 
  alert(content); 
}"; 
echo "</script>"; 
while ($row = mysql_fetch_array($result)) { 

  $content = nl2br($row['content']); 
  echo "<a id=\"details\" onclick=\"show_details('id', 'title', '$content');\"></a>"; 
}
于 2012-10-04T10:05:59.433 に答える
0

テキストにEnterが含まれている場合、JavaScriptは次のようにレンダリングされます。

show_details('piece of
content');

これは無効です。

Entersを\nに置き換えます。

while ($row = mysql_fetch_array($result)) 
{
    $content = $row['content'];
    $content = strreplace("\n", "\\n", $content); // 'escape' breaks.
    $content = strreplace("'", "\\'", $content); // escape quotes.

    ?> 
    <a id="details" onclick="show_details('<?=$content?>');"></a>";
    <?
}
?>
<script type="text/javascript" charset="utf-8">";
function show_details(content) {
    alert(content);
}
</script>;

ご覧のとおり、show_detailsの宣言をループの外に移動しました。必要なのは1回だけです。エコーも削除しました。HTML構文の強調表示が失われ、すべてのエスケープが必要になります。この方法の方がはるかにクリーンだと思います。

于 2012-10-04T10:07:30.737 に答える
0

JavaScript と PHP を分離したほうがよいと思います。

したがって、PHP ファイル (または HTML テンプレート) で、スクリプトを設定します。

<script type="text/javascript" charset="utf-8">
    function show_details(id, title, content) {
        alert(content);
    }
</script>

私が気づいたこと:なぜあなたのshow_details関数には3つのパラメータ(id、、 )があるのにtitlecontent以下の初期化関数にはしかないのcontentですか?とりあえずとを削除してみて、動作するかどうかを確認してください。idtitlecontent

次に、PHPは次のよ​​うになります。

while ($row = mysql_fetch_array($result)) {
    $content = nl2br($row['content']);
    echo '<a id="details" onclick="show_details(\'' . $content . '\');"></a>';
}

さて、問題を起こしている新しい行に関しては、このようなことを試しましたか?

JavaScript の追加:

function escapeHtml(unsafe) {
  return unsafe
      .replace(/&/g, "&amp;")
      .replace(/</g, "&lt;")
      .replace(/>/g, "&gt;")
      .replace(/"/g, "&quot;")
      .replace(/'/g, "&#039;");
}

PHP:

while ($row = mysql_fetch_array($result)) {
    $content = nl2br($row['content']);
    echo '<a id="details" onclick="show_details(escapeHtml(\'' . $content .'\'));"></a>';
}

または、この投稿のコメントで示唆されているように、次のようなPHP を使用して試すことhtmlentitiesもできます。htmlspecialchars$content

while ($row = mysql_fetch_array($result)) {
    $content = htmlentities( nl2br( $row['content']) );
    echo '<a id="details" onclick="show_details(escapeHtml(\'' . $content .'\'));"></a>';
}

これがエンコーディングの問題であるとは確信していませんが、確かに間違っている可能性があります... :)

于 2012-10-04T10:10:58.560 に答える