Как конвертировать HTML & ldquo; class & rdquo; приписать CSS селектор с использованием языка PHP?

Я думаю, что вы, вероятно, получаете пустую строку в firstString, потому что secondString недостаточно длинна, чтобы содержать 2 символа и нулевой байт, и так получилось, что на вашем машина с вашим компилятором, secondString хранится непосредственно перед firstString в памяти. Когда fscanf() копирует AB и нулевой байт в secondString, нулевой байт запишет первый байт из firstString, чтобы он выглядел (является) пустым.

Вы могли бы подтвердите это, напечатав &firstString[1] с помощью "[%s]" и увидев, что он содержит большую часть того, что вы ожидали.

Этот макет не гарантируется стандартом; это просто правдоподобное предположение, объясняющее то, что вы видите. Вам нужно либо использовать %2c вместо %2s, чтобы получить AB в secondString (но тогда имя «строка» является неправильным, это не строка с нулевым завершением). Или вам нужно увеличить размер secondString до не менее 3 байтов - допустим, что терминал null. У вас есть аналогичная проблема с размером с firstString. Разница между размером массива в коде (N байтов, скажем) и размером строки в форматах scanf() (N-1 байт) является «неудобной», но освящена многолетними традициями (это было, таким образом, в 7-м выпуске Unix около 1978 года). Теперь изменить его было бы хуже, чем оставить в покое.

Вам также нужно исправить вызов fscanf(), чтобы вы передали &number вместо number.

3
задан Alex Vasilyev 18 January 2019 в 22:34
поделиться

5 ответов

Мое предложение:

<?php
$html_classes = 'class1    class2  class3 ';
$result = '.' . preg_replace('/\s+/', '.', trim($html_classes));
echo $result;
?>

Регулярные выражения:

  • \ s символ пробела.

  • + означает одно или несколько вхождений.

PHP (из http://php.net ):

0
ответ дан Christoph 18 January 2019 в 22:34
поделиться

Вы можете сделать это без дополнительной обрезки или объединения. Найдите непробельные символы, заключенные в ноль или более пробелов, и замените эти совпадения непропускной частью совпадения, которому предшествует точка.

$html_classes = preg_replace('/\s*(\S+)\s*/', '.$1', $html_classes);
0
ответ дан Don't Panic 18 January 2019 в 22:34
поделиться

Ответ так же прост, как один вызов на замену на основе регулярных выражений:

<?php
$input = 'class1    class2  class3  ';
$output = preg_replace('/\s*([\w\d]+)\s*/', '.${1}', $input);
print_r($output);

Выход, очевидно,:

0
ответ дан arkascha 18 January 2019 в 22:34
поделиться

Просто сначала замените все лишние пробелы на синглы. И выполните trim (), чтобы убрать пробелы в начале и в конце.

$html_classes = 'class1    class2  class3 ';
$html_classes = trim(preg_replace('/\s+/',' ',$html_classes));
$result = '.' . str_replace(' ','.',$html_classes);
0
ответ дан amedv 18 January 2019 в 22:34
поделиться

Попробуйте это:

<?php
$html_classes = 'class1    class2  class3 ';
$parts = explode(" ", $html_classes);
$results = "";
foreach($parts as $c){
    if($c != ""){
        $results .= "." . $c;
    }
}
echo $results;
?>

Результаты, которые я получил:

.class1.class2.class3

Надеюсь, что помогает.

0
ответ дан Twisty 18 January 2019 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: