PHP/HTML Tidy: anchor-as-name = no не работает?

Я использую PHP Tidy в качестве включенного скрипта, и, хотя он работает в основном (хотя и несовершенно), похоже, он не работает для удаления атрибутов имени из моих тегов. Я пробовал все, чтобы удалить их, в том числе удалить их с помощью PHP Simple HTML DOM перед запуском Tidy, но они просто продолжают возвращаться.

Я тщательно исследовал эту проблему, но единственные результаты, к которым я пришел, - это люди, рекомендующие использовать привязку как имя, поэтому она должна работать, и что-то в том, что я делаю, не работает.

Моя конфигурация 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'
);

Если подумать, кажется, что только шоу-тело тоже не работает... может быть, все это просто игнорируется, и я делаю что-то еще принципиально неправильное?

Любые подсказки и помощь будут с благодарностью.

Оэзи: Спасибо за подсказку относительно обновления вопроса. Это первый вопрос, который я задал здесь.

Я использую теги 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>

Таким образом, аккуратным является не только добавление тегов имен, несмотря на то, что для параметра anchor-as-name задано значение no, но и создание тегов вне тела, несмотря на то, что для параметра show-body-only установлено значение yes.

Хотя очевидное решение, казалось бы, состоит в том, чтобы просто не использовать tidy, поскольку я получаю то, что хочу для приведенных выше строк, из простого html dom, я анализирую файлы с миллионом символов и более (документы на 500-1000 страниц), написанные в жалком Word версию HTML — ежедневно — так что она действительно полезна благодаря своим многим другим функциям.


person Erika S    schedule 21.03.2012    source источник


Ответы (1)


из документации:

[...] Если установлено значение «нет», любой существующий атрибут имени удаляется, если атрибут идентификатора существует или был добавлен.

вы не предоставили информацию об этом, поэтому я предполагаю, что вы просто не установили идентификатор для якорей, где «это не работает».

person oezi    schedule 21.03.2012
comment
в любом случае вам не следует публиковать дополнительную информацию в комментариях - отредактируйте свой вопрос и вместо этого добавьте пример. - person oezi; 21.03.2012