У меня была такая же ошибка, но я исправил ее, изменив php.ini и / или отредактировав файл PHP!
blockquote>Есть два разных способа обойти синтаксис синтаксического анализа.
Способ 1 (ваш файл PHP)
Избегайте в вашем файле PHP этого:
} ?>
Убедитесь, что вы так выразились
Ваш код содержит
?>
ПРИМЕЧАНИЕ: Отсутствует
php
после!
Способ 2 (файл php.ini)
Существует также простой способ решить вашу проблему. Найдите значение свойства
short_open_tag
(используйте в текстовом редакторе с помощьюCtrl + F
!) [/ G2] и примените следующее изменение:; short_open_tag = Off
-
short_open_tag = On
Согласно описанию основных директив php.ini ,
short_open_tag
позволяет использовать короткий открытый тег (), хотя это может вызвать проблемы при использовании с xml (
не будет работать, если это включено)!
ПРИМЕЧАНИЕ: Перезагрузите свой сервер (например, Apache) и перезагрузите веб-страницу PHP в своем браузере.
В .NET 4 вы можете сделать следующее:
String.Concat(Enumerable.Repeat("Hello", 4))
Обратите внимание, что, если Ваша "строка" является только отдельным символом, существует перегрузка строкового конструктора для обработки его:
int multipler = 10;
string TenAs = new string ('A', multipler);
К сожалению / к счастью, строковый класс изолируется так, Вы не можете наследоваться ему и перегрузиться * оператор. Можно создать дополнительный метод хотя:
public static string Multiply(this string source, int multiplier)
{
StringBuilder sb = new StringBuilder(multiplier * source.Length);
for (int i = 0; i < multiplier; i++)
{
sb.Append(source);
}
return sb.ToString();
}
string s = "</li></ul>".Multiply(10);
я с DrJokepu на этом , но если бы по некоторым причинам Вы действительно хотели обмануть использующую встроенную функциональность затем, то Вы могли бы сделать что-то вроде этого:
string snip = "</li></ul>";
int multiplier = 2;
string result = string.Join(snip, new string[multiplier + 1]);
Или, если Вы используете.NET 4:
string result = string.Concat(Enumerable.Repeat(snip, multiplier));
Лично я не обеспокоился бы, хотя - пользовательский дополнительный метод намного более хорош.
Необходимо было бы записать метод - конечно, с C# 3.0, это мог быть дополнительный метод:
public static string Repeat(this string, int count) {
/* StringBuilder etc */ }
затем:
string bar = "abc";
string foo = bar.Repeat(2);
string Multiply(string input, int times)
{
StringBuilder sb = new StringBuilder(input.length * times);
for (int i = 0; i < times; i++)
{
sb.Append(input);
}
return sb.ToString();
}
Хорошо, вот мое взятие по вопросу:
public static class ExtensionMethods {
public static string Multiply(this string text, int count)
{
return new string(Enumerable.Repeat(text, count)
.SelectMany(s => s.ToCharArray()).ToArray());
}
}
я немного глуп, конечно, но когда у меня должно быть табулирование в генерирующих код классах, Счетных. Повторение делает это для меня. И да, версия StringBuilder прекрасна, также.
Для полноты картины - вот еще один способ сделать это:
public static string Repeat(this string s, int count)
{
var _s = new System.Text.StringBuilder().Insert(0, s, count).ToString();
return _s;
}
Мне кажется, я вытащил его из Stack Overflow некоторое время назад, так что это не моя идея.
Вот мой вариант, на всякий случай:
/// <summary>
/// Repeats a System.String instance by the number of times specified;
/// Each copy of thisString is separated by a separator
/// </summary>
/// <param name="thisString">
/// The current string to be repeated
/// </param>
/// <param name="separator">
/// Separator in between copies of thisString
/// </param>
/// <param name="repeatTimes">
/// The number of times thisString is repeated</param>
/// <returns>
/// A repeated copy of thisString by repeatTimes times
/// and separated by the separator
/// </returns>
public static string Repeat(this string thisString, string separator, int repeatTimes) {
return string.Join(separator, ParallelEnumerable.Repeat(thisString, repeatTimes));
}
Если у вас .Net 3.5, но не 4.0, вы можете использовать System.Linq
String.Concat(Enumerable.Range(0, 4).Select(_ => "Hello").ToArray())