PHP str_replace на вход от javascript

Изпълнявам някакъв ajax, който изпраща екраниран текст от клиента към php страница, работеща на сървъра. В текста има връщане на каретка. Когато повторя тези с помощта на php, те се показват в текста като \n.

Когато обаче се опитам да заменя \n с str_replace, функцията не ги намира.

Това ме подлудява.

За разлика от това, ръчно създадох променлива в същия php файл с куп \n s в него и в този случай същият 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. Като бягство от последователността за бягство.

person elgis    schedule 04.05.2014

Когато опитам със str_replace нищо не се променя, но използвайки preg_replace се получава така

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

добре, html

<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