0

ほとんどのコードは無関係なので、コードの主要部分を示します。

    $url = $row['url'];
    echo "<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction($url)'>"; 

およびjavascript関数:

 function myFunction(something) { 
 alert (something);
 }

私はfirebugで次のエラーを受け取ります:

missing ) after argument list
[Break On This Error]   
    myFunction(http://anything.com/anything...
-------------------^

私はjavascriptに比較的慣れていませんが、URLからの「:」を明らかに許可していないことがわかります。ただし、画像の正確なIDを通知する必要があるため、IDを変更または変更することはできません。

私はこれをphpなしで別の形式で作成したので、問題があるのはそこにあると思いますか?

4

4 に答える 4

5

URLは文字列である必要がありますが、文字列の内容を出力しているだけです。

他の場所で提案されているように、引用符で囲むこともできますが、それはせいぜい不完全な解決策です。

幸いなことに、PHPはより良い答えを提供json_encodeします:(あなたの場合)と組み合わせてhtmlspecialchars。これは、(とりわけ)JavaScriptコードで使用できるように、文字列を適切にラップする関数です。それで:

$escapedUrl = htmlspecialchars(json_encode($url));

それから

...onclick='myFunction($escapedUrl)'...

json_encodeはテキストをJSONとしてエンコードするためのものですが、JSONはJavaScriptリテラル表記のサブセットでありjson_encode、有効で適切にエスケープされたJavaScript文字列を非常に喜んで返します...

htmlspecialchars生成しているJavaScriptコードを属性に出力するため、同様に必要です。また、HTMLテキスト内のすべてのHTML属性のコンテンツ(コードが含まれているものも含む)は適切にエンコードする必要onclickがあるため、(たとえば)&する&amp;など

于 2012-11-11T13:10:54.993 に答える
4

これを行う:

$escapedString = json_encode($url);
echo "<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction($escapedString)'>";

TJ Crowderは正しいです、そしてあなたはより多くの情報のためにこれをチェックすることができます:

JSON応答のテキストをエスケープする正しい方法は何ですか?

私の最初の解決策が正しくないのはなぜですか(1つのケースで機能するように見えても)?

これを読んでください:http://kunststube.net/escapism/

echo "<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction(\"$url\")'>";

基本的に、myFunction呼び出しに渡された値を二重引用符で囲む必要があります。

onclick='myFunction(\"$url\")'

于 2012-11-11T13:08:13.813 に答える
2

これは、次のようなことをしているためです。

myFunction(http://anything.com)

文字列パラメーターの場合、関数パラメーターは引用符または二重引用符で囲む必要があります。

myFunction("http://anything.com")

したがって、エコーは次のようになります。

"<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction(\"$url\")'>"

$urlまた、有効な文字を含める必要がないことを考慮に入れる必要があるため、エンコード/エスケープを追加する必要があります(XSSの観点から考えてください)。

于 2012-11-11T13:08:50.570 に答える
0

encodeURI(uri)次の関数を使用する必要があります。

"<div id='anything'><img id='$url' src='$cover' alt='$title' onclick='myFunction(encodeURI(\'$url\'))'>";
于 2012-11-11T13:09:01.097 に答える