1

のいずれかの値が の<select>HTML 形式のオブジェクトがあります。<option>Test's for/ chars

HTML:

<option value="Test's for/ chars">TEST'S FOR/ CHARS</option>

$_REQUEST と $_POST の両方が出力されます:

Test

効果のないアポストロフィをエスケープしようとしました。それから私は得るでしょうTest\

私はphp 5.4.6を使用しています。

PHP - 一般化

while($row = mysql_fetch_array($result)):?>
    <option value="<?=$row['field']?>" <?=strtoupper($row['field'])?></option>
<?endwhile;?>
4

4 に答える 4

3

バックスラッシュを使用してHTML引用符をエスケープすることはできません。出力でhtmlspecialchars($ string、ENT_QUOTES)を使用してみてください。

echo "<option value=\"" . htmlspecialchars($str) . "\">$str</option>";

この関数は、特殊文字を適切なHTMLエンティティに変換します。

The translations performed are:

'&' (ampersand) becomes '&amp;'
'"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set.
"'" (single quote) becomes '&#039;' (or &apos;) only when ENT_QUOTES is set.
'<' (less than) becomes '&lt;'
'>' (greater than) becomes '&gt;'
于 2013-01-29T18:19:04.650 に答える
0

'を&#39;に変更できますか?

<option value="Test&#39;s for/ chars">TEST&#39;S FOR/ CHARS</option>
于 2013-01-29T18:18:20.697 に答える
0

あなたの例を PHP5.3.10 で試してみましたが、そのままで動作しました。次のコード例を使用しました。

test.html :

<html>
 <head></head>
 <body>
  <form method="post" action="test.php">
  <select name="test">
    <option value="Test's for/ chars">TEST'S FOR/ CHARS</option>
  </select>
  <input name="submit" type="submit" />
  </form>
 </body>
</html>

test.php :

<?php

echo $_POST['test'];

ブラウザでの出力:

Test's for/ chars
于 2013-01-29T18:27:33.853 に答える
0
<option value="Test's for/ chars">TEST'S FOR/ CHARS</option>

特別な車の前にエスケープを配置する必要があります。そう:<option value="Test\'s for/ chars">TEST'S FOR/ CHARS</option>

于 2013-01-29T18:14:29.207 に答える