Я нахожусь на грани сумасшествия здесь. Я пытаюсь удалить окончания строк из строки в php, но ни один из существующих методов не работает, и я не могу понять, почему нет.
$result = str_replace(array("\n", "\r"), '', $string));
$result = preg_replace("/\n/, '', $string"));
$result = preg_replace("/\n|/r|/s/, '', $string")); // this one does remove the whitespace though
$result = str_replace(PHP_EOL, '',trim(rtrim($string)));
И много, много других вариаций …
Это заставляет меня думать, что это может быть чем-то другим, вызывающим проблему, потому что мой тест прост.
var_dump($originalString);
$test = " stringl \n";
$testWithoutLineBreak = preg_replace("/\n/", '', $test);
$originalString = preg_replace("/\n/", '', $originalString);
var_dump($test);
var_dump($testWithoutLineBreak);
var_dump($originalString);
Дает следующий результат:
string(13) " stringl
"string(10) " stringl
"string(9) " stringl "string(13) " stringl
"
Обратите внимание на разницу в числе: тестовая строка, которую я сделал для репликации оригинала, содержит 10 символов с переносом строки, в то время как исходная строка содержит 13 символов.
Также preg_replace работает на моей тестовой строке, но не на оригинальной.
В конце концов я попытался поместить все это в скрытую программу обнаружения символов:
string(13)[Space]"[Space]stringl[End of Line(LF)]
"[End of Line(LF)]
string(10)[Space]"[Space]stringl[Space][End of Line(LF)]
"[End of Line(LF)]
string(9)[Space]"[Space]stringl[Space]"[End of Line(LF)]
string(13)[Space]"[Space]stringl[End of Line(LF)]
"
Там нет результата.
Есть ли объяснение этой магии? Спасибо!
Иногда в таких ситуациях вас обманывают символы / байтовые значения, которые вы не можете «увидеть» при просмотре строки в виде простого текста или HTML.
Вы можете, например, использовать urlencode
сделать отладочный вывод значения, чтобы вы могли определить, каковы действительные значения байтов в этих позициях.
Это обычно помогает сузить проблемы, как это.
Других решений пока нет …