PHP / HTML整洁:anchor-as-name = no似乎不起作用?

时间:2012-03-21 06:09:03

标签: php htmltidy

我正在使用PHP Tidy作为一个包含的脚本,虽然它似乎主要(如果不完美)工作,但它似乎无法从我的标签中删除名称属性。我已经尝试了删除它们的所有内容,包括在运行Tidy之前使用PHP Simple HTML DOM删除它们,但它们只是继续被放回去。

我已经广泛研究了这个问题,但我提出的唯一结果是来自推荐使用锚名称的人,所以它必须有效,而且我正在做的事情就是那些不起作用的东西

我的Tidy配置如下,或许还有其他东西覆盖了anchor-as-name元素?我把它移到了底部,以防万一会有所帮助,但似乎没有。我也尝试将其设置为false,这也无济于事。

$tidy_config = Array(

    'break-before-br'       => 'no',
    'clean'                 => 'clean',
    'doctype'               => 'strict',
    'drop-empty-paras'      => 'yes',
    'drop-font-tags'        => 'yes',
    'force-output'          => 'yes',
    'indent'                => 'yes',
    'indent-attributes'     => 'no',
    'indent-spaces'         => 2,
    'input-encoding'        => 'utf8',
    'join-styles'           => 'no',
    'literal-attributes'    => 'yes',
    'logical-emphasis'      => 'yes',
    'lower-literals'        => 'yes',
    'merge-divs'            => 'no',
    'merge-spans'           => 'yes',
    'output-encoding'       => 'ascii',
    'output-xhtml'          => 'yes',
    'output-bom'            => 'no',
    'preserve-entities'     => 'yes',
    'quiet'                 => 'yes',
    'quote-ampersand'       => 'yes',
    'quote-marks'           => 'no',
    'quote-nbsp'            => 'yes',
    'show-body-only'        => 'yes',
    'show-errors'           => 0,
    'show-warnings'         => 0,
    'sort-attributes'       => 'alpha',
    'tidy-mark'             => 'no',
    'vertical-space'        => 'yes',
    'wrap'                  => '0',
    'wrap-attributes'       => 'no',
    'anchor-as-name'        => 'no'
);

来想一想,show-body-only似乎也没有起作用......也许整件事情只是被忽略而我正在做其他根本错误的事情?

非常感谢任何线索和协助。

Oezi:感谢关于更新问题的提示。这是我在这里提出的第一个问题。

我正在使用id标签。这是通常发生的事情(之前定义了所有相关变量):

require_once $docRoot . '/htmldom/simple_html_dom.php';
require $this_dir . '/includes/create-tidy-object.php';
$string1 = "<a id='anchor1'>First Anchor Text</a>";
$string2 = "<a id='anchor2' name='anchor2'>Second Anchor Text</a>";
$string3 = "<a id='anchor3'>Third Anchor Text</a>";
$tidy->parseString($string1,$tidy_config,'utf8');
$tidy->cleanRepair();
$revised_string_1 = $tidy;
print "<pre>Revised String 1:\n" . htmlentities($revised_string_1) . "\n\n";
$tidy->parseString($string2,$tidy_config,'utf8');
$tidy->cleanRepair();
$revised_string_2 = $tidy;
print "Revised String 2:\n" . htmlentities($revised_string_2) . "\n</pre>\n";
$stringdom3 = str_get_html($string3);
foreach($stringdom3->find('a[id]') as $anchor) { $anchor->name = null; }
$revised_string_3 = $stringdom3;
print "<pre>\nRevised String 3, after PHP Simple HTML DOM Parser:\n";
print htmlentities($revised_string_3) . "\n</pre>\n";
$tidy->parseString($revised_string_3,$tidy_config,'utf8');
$tidy->cleanRepair();
$revised_string_3a = $tidy;
print "<pre>Revised String 3, after going through both:\n";
print htmlentities($revised_string_3a) . "\n\n";

生成(添加换行符以提高易读性):

Revised String 1:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title></title>
</head>
<body>
<a id='anchor1' name="anchor1">First Anchor Text</a>
</body>
</html>

Revised String 2:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title></title>
</head>
<body>
<a id='anchor2' name='anchor2'>Second Anchor Text</a>
</body>
</html>

Revised String 3, after PHP Simple HTML DOM Parser:
<a id='anchor3'>Third Anchor Text</a>

Revised String 3, after going through both:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<title></title>
</head>
<body>
<a id='anchor3' name="anchor3">Third Anchor Text</a>
</body>
</html>

所以整洁不仅仅是添加名称标签,尽管名称锚定设置为否,它也会在身体外部生成标签,尽管show-body-only设置为yes。

虽然显而易见的解决方案似乎是不使用整洁,因为我从简单的html dom获得了我想要的上述行,我正在解析写入的百万字符加文件(500-1000页文档)在Word的可怜版本的HTML中 - 每天 - 所以它真的有助于它的许多其他功能。

1 个答案:

答案 0 :(得分:0)

来自the documentation

  

[...]如果设置为“no”,则会删除任何现有的name属性如果存在id属性或已添加。

你没有提供相关的信息,所以我假设你没有为那些“它不起作用”的锚点设置一个id。