PHP str_replace ввода из javascript

Я запускаю некоторый ajax, который отправляет экранированный текст с клиента на php-страницу, работающую на сервере. В тексте есть возврат каретки. Когда я повторяю их с помощью php, они отображаются в тексте как \n.

Однако, когда я пытаюсь заменить \n на str_replace, функция их не находит.

Это сводило меня с ума.

Напротив, я вручную создал переменную в том же файле php с кучей \n в ней, и в этом случае тот же код str_replace заменил их нормально.

Могут ли быть какие-то невидимые символы или что-то еще, что отбрасывает его?

Спасибо за любые предложения.

После замены (все в PHP) работает нормально

    $var = "some text\nsomemore text\nsome more text\nsome more";
echo $var; //displays above text
    $strComma = str_replace("\n",",",$var);
    echo "strComma".$strComma; \\all of the \n instances are replaced by comma

После замены не работает

JavaScript (сокращенно)

var text = document.getElementById(textbox).value; //grabs text from client html
var text2 = escape(text); //escape needed to handle special characters in text

//send to php page
xmlhttp.open("GET","storetext.php?text="+text2,true);
xmlhttp.send();

PHP

 $var = $_REQUEST['text'];
echo $var; //displays \n as above.  So far so good.
 $strComma = str_replace("\n",",",$var);
    echo "strComma".$strComma; \\ replacement does not take place

person user1904273    schedule 04.05.2014    source источник
comment
Пробовал ответить ниже, но это не сработало. Заменить все еще не получая \n. Ответ не позволит мне добавить комментарий, поэтому оставьте комментарий здесь.   -  person user1904273    schedule 04.05.2014


Ответы (2)


Это должно работать:

$strComma = str_replace("\\n",",",$var);

Две обратные косые черты, а затем символ n. Как экранирование escape-последовательности.

person elgis    schedule 04.05.2014

Когда я пытаюсь использовать str_replace, ничего не меняется, но при использовании preg_replace происходит вот так

$strComma = preg_replace("/\n/",",",$var);

хорошо, хтмл

<html>
    <head>
        <script src="../../js/jquery_1_8_min.js" type="text/javascript"></script>
    </head>
    <body>
        <script>
        text = "some text\nsomemore text\nsome more text\nsome more";
        text2 = escape(text)
        $.post('lixo.php?'+Math.random(),{text:text2}, function(data) {
            alert(data);
        });
        </script>
    </body>
</html>

php

<?php
    $var = $_POST["text"];
    echo $var; //displays above text
    $strComma = preg_replace("/%0A/",",",$var);
    $strComma = preg_replace("/%20/",",",$var);
    echo "<br>strComma = ".$strComma;
?>

когда вы экранируете свой текст, \n становится %0A, а пробел становится %20

лучше php

<?php
    $var = $_POST["text"];
    echo $var."<br>";
    $patterns = array();
    $patterns[0] = "/%0A/";
    $patterns[1] = "/%20/";
    $replacements = array();
    $replacements[0] = ",";
    $replacements[1] = " ";
    $strComma = preg_replace($patterns, $replacements,$var);
    echo "<br>strComma = ".$strComma;
?>
person Pluda    schedule 04.05.2014
comment
Пробовал и preg_replace, но все равно показывал \ns. Вы кормите его текстом с помощью ajax? - person user1904273; 04.05.2014