【问题标题】:Set the value of an html tag attribute within a php clause在 php 子句中设置 html 标记属性的值
【发布时间】:2013-11-11 06:30:01
【问题描述】:

长话短说……

这是我要设置属性的html标签:

echo "<input type='text' name='name' value='".$phpvar."'>";

$phpvar 中可以包含任何文本和符号(包括引号和双引号)

如何正确转义/转换字符串以使其正确显示?

谢谢大家!

编辑 谢谢大家帮助我! 好的,如果其他人对此感到困惑,这解决了我的问题:

  1. 使用双引号 (") 将属性值括起来,因为 HTML 只有双引号 (") 的实体代码,它们不会像单引号 (') 那样出错。
  2. 使用 htmlentities() 或 htmlspecialchars() 转换/编码字符串。

【问题讨论】:

标签: php html mysql database


【解决方案1】:

htmlentities 就是为这种事情而生的。

$phpvar= '"&#test"';
echo '<input type="text" name="name" value="'.htmlentities($phpvar).'">';

会输出

<input type='text' name='name' value='&quot;&amp;#test&quot;'>

文本字段将显示"&amp;#test"

【讨论】:

  • 我想这就是我想要的,谢谢!但是顺便问一下,htmlentities()、strip_tags()、urlencode()和htmlspecialchars()简单来说有什么区别?
  • htmlentities()htmlspecialchars() 是相同的。我只是更喜欢较短的。 strip_tags() 用于删除像 &lt;p&gt; 这样的 html 标签。 urlencode() 用于对 URL 进行编码,例如需要特殊字符的链接。
  • 好的,现在我明白了,只是另一件事,我注意到 htmlentities() 和 htmlspecialchars() 都不会转换单引号,正如我上面提到的,$phpvar 可以包含任何内容,包括这两种类型的引号在同一个字符串中
  • 我更新了我的答案以反映引号被颠倒。这样单引号不会引起问题。问题是 HTML 没有单引号的实体代码。因此,通过确保value="" 使用双引号,所有实体都将被转换为将显示在文本字段中的所有实体,包括单引号。我希望这是有道理的。
【解决方案2】:

要将值发送到您的 php 文件,您需要对 &amp;"' 等字符以及更多浏览器无法识别的符号进行编码。

为此,您可以使用 urlencode() 将这些符号转换为它可以呈现的 html 符号实体。

这是它的外观,

echo "<input type='text' name='name' value='".urlencode($phpvar)."'>";

这里有一些关于 stackoverflow 的有用问题可以帮助你。

Why should I use urlencode?

AJAX + PHP self-generated fields producing blank results

祝你好运!

【讨论】:

  • 谢谢,但 $phpvar 中的文本将在 html 中使用,而不是作为 url
  • 它们以与 html 相同的方式对符号进行编码,但 htmlentities($phpvar) 是更好的选择。祝你好运!
【解决方案3】:

我不确定您要从变量中删除哪些特殊字符。正如您提到的引号,以下代码将从字符串中删除单引号和双引号。

<?php    
$quotes = array('"', "'");

echo str_replace($quotes, "", "Hello Wor'l'd of PHP");

【讨论】:

  • 这很有用,谢谢,但不适用于 # & 等其他符号...我想我会坚持使用 urlencode、htmlentities 或 htmlspecialchars
【解决方案4】:

您可以使用strip_tags()urlencode()htmlspecialchars()

或者改变你的 echo 语句,如果 $phpvar 的值只包含单引号,那么使用双引号是一个更好的做法

echo '&lt;input type="text" name="name" value="$phpvar"&gt;';

【讨论】:

  • 这是一种解决方法,但是 $phpvar 可以随时包含单引号、双引号或两者都包含...
猜你喜欢
  • 2012-02-18
  • 1970-01-01
  • 2016-09-21
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
  • 2021-11-09
相关资源
最近更新 更多