0

編集可能なテキスト領域でその文字列を開く JavaScript 関数に文字列を渡そうとしています。文字列に改行文字が含まれていない場合は、正常に渡されます。しかし、改行文字があると失敗します。PHPでの私のコードは次のようになります

$show_txt = sprintf("showEditTextarea('%s')", $test_string);
$output[] = '<a href="#" id="link-'.$data['test'].'" onclick="'.$show_txt.';return false;">';

そして、JavaScript関数は次のようになります-

$output[] = '<script type="text/javascript">
   var showEditTextarea = function(test_string) {
                 alert(test_string);
    }
    </script>';

正常に渡された文字列は「This is a test」で、「This is a first test」で失敗しました

二次試験です」

4

5 に答える 5

4

Javascript では、文字列に改行文字を使用できません。\n呼び出しの前にそれらを置き換える必要がありsprintf()ます。

于 2013-07-18T15:23:58.230 に答える
1

HTML や JS を PHP 変数に保存することはできる限り避けたいと思いますが、HTML を PHP 変数に保存する必要がある場合は、改行文字をエスケープする必要があります。

試す

$test_string = str_replace("\n", "\\\n", $test_string);

str_replace では必ず二重引用符を使用してください。そうしないと、\n は改行文字ではなく文字どおり \n として解釈されます。

于 2013-07-18T15:27:53.877 に答える
1

新しい行を削除する次のコードを試してください。

$show_txt = sprintf("showEditTextarea('%s')", str_replace(PHP_EOL, '', $test_string));

または次のように置き換えます: \n.

$show_txt = sprintf("showEditTextarea('%s')", str_replace(PHP_EOL, '\n', $test_string));
于 2013-07-18T15:28:07.360 に答える
1

JavaScript 関数に渡す前に、php 文字列内のすべてのスペースを \r\n に置き換えてみませんか? それが機能するかどうかを確認してください。

それでもうまくいかない場合は、次を試してください: str_replace($test, "\n", "\n");

カプセル化されるため、2 つの \ に置き換えると機能する場合があります。

于 2013-07-18T15:25:01.370 に答える
1

JavaScript変数をエスケープするものが何もないため、このエラーが発生しています... json_encode はここで役立ちます。二重引用符をエスケープするには、コンテキストで追加ラッシュも使用する必要があります。

$show_txt = sprintf("showEditTextarea(%s)", json_encode($test_string));
$output[] = '<a href="#" id="link-'.$data['test'].'" onclick="'.htmlspecialchars($show_txt).';return false;">';
于 2013-07-18T15:26:32.817 に答える