2012-06-07 2 views
3

Ситуация простая:Заменить новые строки с PHP на JavaScript

Я размещаю простую форму HTML с текстовым полем. Затем, в PHP, я регистрирую функцию JavaScript в зависимости от содержимого формы.

Это делается с помощью следующего кода:

$js = sprintf("window.parent.doSomething('%s');", $this->textarea->getValue()); 

работает как шарм, пока я пытаюсь обрабатывать переводы строк. Мне нужно заменить новые строки char 13 (я считаю), но я не могу добраться до рабочего решения. Я попытался следующие:

$textarea = str_replace("\n", chr(13), $this->textarea->getValue()); 

И следующее:

$js = sprintf("window.parent.doSomething('%s');", "'+String.fromCharCode(13)+'", $this->textarea->getValue()); 

Кто-нибудь есть ключ к пониманию того, как я могу обрабатывать эти новые строки правильно?

+0

Правильно. Но вы можете добавить некоторые другие символы, чтобы завершить текстовое поле проверки. – luther

+1

Почему вы хотите заменить '\ n'? Не могли бы вы указать свою цель? – nebulousGirl

+1

Это также сбой, если '$ this-> textarea-> getValue());' содержит '' '. – Eric

ответ

3

Вы были почти там, вы просто забыли на самом деле заменить перерывы.

Это должно сделать трюк:

$js = sprintf("window.parent.doSomething('%s');" 
    , preg_replace(
       '#\r?\n#' 
      , '" + String.fromCharCode(13) + "' 
      , $this->textarea->getValue() 
); 
-1

использование

str_replace(array("\n\r", "\n", "\r"), char(13), $this->textarea->getValue()); 

Это должно заменить все новые строки в строке с гольца (13)

+0

** - 1 ** - Это не работает, поскольку '' \ n "== char (13)' – Eric

1

Что ты хотел сделать, это:

str_replace("\n", '\n', $this->textarea->getValue()); 

Заменить все символы новой строки с буквальная строка '\n'.


Однако, вы бы лучше кодировать его, как JSON:

$js = sprintf(
    "window.parent.doSomething('%s');", 
    json_encode($this->textarea->getValue()) 
); 

Это закрепит котировки, а также.

1

Ваша проблема уже решена в другом месте в нашем кодовую ...

Взятые из нашего WebApplication.php файла:

/** 
    * Log a message to the javascript console 
    * 
    * @param $msg 
    */ 
    public function logToConsole($msg) 
    { 
     if (defined('CONSOLE_LOGGING_ENABLED') && CONSOLE_LOGGING_ENABLED) 
     { 
      static $last = null; 
      static $first = null; 
      static $inGroup = false; 
      static $count = 0; 

      $decimals = 5; 

      if ($first == null) 
      { 
       $first   = microtime(true); 
       $timeSinceFirst = str_repeat(' ', $decimals) . ' 0'; 
      } 

      $timeSinceFirst = !isset($timeSinceFirst) 
       ? number_format(microtime(true) - $first, $decimals, '.', ' ') 
       : $timeSinceFirst; 

      $timeSinceLast = $last === null 
       ? str_repeat(' ', $decimals) . ' 0' 
       : number_format(microtime(true) - $last, $decimals, '.', ' '); 

      $args = func_get_args(); 
      if (count($args) > 1) 
      { 
       $msg = call_user_func_array('sprintf', $args); 
      } 
      $this->registerStartupScript(
       sprintf("console.log('%s');", 
        sprintf('[%s][%s] ', $timeSinceFirst, $timeSinceLast) . 
        str_replace("\n", "'+String.fromCharCode(13)+'", addslashes($msg)))); 

      $last = microtime(true); 
     } 
    } 

бит, который вас интересует:

str_replace("\n", "'+String.fromCharCode(13)+'", addslashes($msg)) 

Обратите внимание, что в ваших вопросах «sprintf, вы забыли str_replace ...

Смежные вопросы