何时应使用与号 实体 (&)不在 HTML 链接中使用
When should ampersands entity (&) not be used in HTML links?
什么时候不应该在HTML链接中使用与号实体(&
)?
上下文:我问的原因是我正在使用DOMDocument()
将<img>
标签转换为不同的 HTML,并且与号被复制。 对于我的具体示例,我认为这是由于mb_convert_encoding()
而发生的,但是如果我不使用它,我还有其他问题。 也许还有其他时候不应该在 HTML 链接中使用与号实体?
public static function substituteImg($template, $values, $classI='autoInsert', $classF='',$escape=false) {
$classesToReplace = array($classI);
if($template) {
$doc = new DOMDocument();
$template = mb_convert_encoding($template, 'HTML-ENTITIES', 'UTF-8');
$doc->loadHTML($template);
$xpath = new DOMXPath($doc);
foreach( $xpath->query( '//img') as $img) {
// get the classes into an array
$classes = explode(' ', $img->getAttribute('class')); // this will contain the classes assigned to the element
if (array_intersect($classes, $classesToReplace))
{
// preprocess the image name to match the $values keys
$imageName = pathinfo($img->getAttribute("src"),PATHINFO_FILENAME);
if (isset($values[$imageName])) {
if(is_array($values[$imageName])){
//Not a text node
switch($values[$imageName]['type'])
{
case 'a':
$element = $doc->createElement( 'a',htmlentities($values[$imageName]['value']));
$element_href = $doc->createAttribute('href');
$element_href->value=htmlentities($values[$imageName]['attr']);
$element->appendChild($element_href);
if($classF) {
$element_class = $doc->createAttribute('class');
$element_class->value=$classF;
$element->appendChild($element_class);
}
break;
default:{trigger_error("Invalid element type", E_USER_ERROR);}
}
}
else {$element = $doc->createTextNode($escape?htmlentities($values[$imageName]):$values[$imageName]);}
$img->parentNode->replaceChild($element,$img);
}
}
}
$body = $doc->getElementsByTagName('body')->item(0);
$template=$doc->saveHTML($body); //Select the body tag
$template = str_replace(array('<body>', '</body>'), '', $template); //strip the body tags
unset($doc,$xpath);
}
return $template;
}
传递给 substituteImg() 的示例数组
Array
(
[bla] => 2721930660
[link1] => Array
(
[type] => a
[value] => Yes
[attr] => javascript:void(0)
)
[link2] => Array
(
[type] => a
[value] => link
[attr] => https://example.com/index.php?foo=123&bar=321
)
)
每当要以 HTML 表示数据&
时,都应使用 &
,除非在内容明确标记为 CDATA(表示<script>
和<style>
元素)的元素中使用它。
API 操作 DOM 中的文本时,不应手动使用 &
(这就是您在此处执行的操作)。
如果 DOM 是从 HTML 文档生成的,则在生成 DOM 时,&
将被解析为&
。
如果从 DOM 生成 HTML,则在将其转换为 HTML 时,&
将表示为&
。
对于我的具体示例,我认为这是由于mb_convert_encoding(),
不,这是由于将 DOM 转换为 HTML 的$doc->saveHTML($body);
。
相关文章:
- 制作一个不带HTML a标记但在动画播放完毕后指向其他页面的超链接
- 为什么我在Internet Explorer上看不到html元素
- VBA正在抓取不在HTML源文件中的生成内容
- $Scope变量在HTML中不更新,尽管在控制器中不断更新
- 在不更改HTML源代码的情况下,在管理员TinyMCE编辑器中突出显示文本
- 何时应使用与号 实体 (&)不在 HTML 链接中使用
- 节点上的 d3 事件处理程序不在 HTML DOM 中
- 如果脚本不在 html 文件中,则角度代码会中断
- 替换不在 HTML 标记内的子字符串
- ng-repeat显示的行等于属性的数量,甚至不在HTML视图上显示数据
- 为什么这些变量不在 html 视图中打印
- 动态加载的元素不在 HTML 源代码中
- 当JavaScript在html中时,它可以工作,而它不在html中;t
- 谷歌地图API JavaScript不在html文件中运行,但在w3school中运行
- Javascript计算函数-不在html中计算
- 如何隐藏不在 HTML 标记中的文本
- Angular 2.0 ng-for不在html标签中显示值
- Javascript RegEx替换所有不在HTML标签内的字符
- 使用 javascript,我如何判断 DOM 中的 HTML 对象是否不在 HTML 源代码中
- 如何删除不在HTML元素中的字符