Вопрос по php – Экранированные символы обратной косой черты в строках PHP с одинарными кавычками

0

Я взял эти предложения из руководства по PHP:

'this is a simple string',
'Arnold once said: "I\'ll be back"',
'You deleted C:\\*.*?',
'You deleted C:\*.*?',
'This will not expand: \n a newline',
'Variables do not $expand $either'

Я хотел бы повторить их, используя PHP-код, в точности так, как они отображаются, с экранированными одинарными кавычками (как во втором предложении) и двойными обратными слешами (как в третьем предложении). Это то, что я до сих пор:

<?php

$strings = array(
        'this is a simple string',
        'Arnold once said: "I\'ll be back"',
        'You deleted C:\\*.*?',
        'You deleted C:\*.*?',
        'This will not expand: \n a newline',
        'Variables do not $expand $either');

$patterns = array('~\\\'~', '~\\\\~');
$replacements = array('\\\\\'', '\\\\\\\\');

foreach($strings as $string)
{
        echo '\'' . preg_replace($patterns, $replacements, $string) . '\'' . '</br>';
}
?>

Выход:

'this is a simple string'
'Arnold once said: "I\\'ll be back"'
'You deleted C:\\*.*?'
'You deleted C:\\*.*?'
'This will not expand: \\n a newline'
'Variables do not $expand $either'

но я хотел бы повторить строки точно так, как они перечислены в моем коде, если это возможно. У меня проблемы с двойными символами обратной косой черты (\). Мой второй шаблон ("~ \\ ~"), кажется, заменяет одинарные и двойные обратные слеши. Я также пытался использовать addcslashes () с теми же результатами.

(Я задавал этот вопрос недавно, но без решения)

Заранее спасибо.

Это может быть просто невозможно. Я не знаю, так ли это, но я предполагаю, что PHP не хранит исходный формат строки, а только ее содержимое. В этом случае нет никакого способа провести различие между предложениями № 3 и № 4 в этом примере. JJJ
Спасибо за комментарий, если так, не повезло мне! Anonimista

Ваш Ответ

2   ответа
1

Попробуйте этот код. Это работает, как ожидалось.

 <?php

$strings = array(
    'this is a simple string',
    'Arnold once said: "I\'ll be back"',
    'You deleted C:\\*.*?',
    'You deleted C:\*.*?',
    'This will not expand: \n a newline',
    'Variables do not $expand $either');

 $patterns = array('~\\\'~', '~\\\\~');
 $replacements = array('\\\\\'', '\\\\\\\\');

 foreach($strings as $string){
    print_r(strip_tags($string,"\n,:/"));
    print_r("\n");
 }
?>

Вы можете указать allowable_tags в strip_tags. обращатьсяstrip_tags для дальнейшего понимания ВотDEMO

Error: User Rate Limit Exceeded Anonimista
2

Вместо того, чтобы вмешиваться вpreg_replace()рассмотрите возможность использованияvar_export() распечатать & quot; истинную копию & quot; строки:

foreach ($strings as $s) {
    echo var_export($s, true), PHP_EOL;
}

Выход:

'this is a simple string'
'Arnold once said: "I\'ll be back"'
'You deleted C:\\*.*?'
'You deleted C:\\*.*?'
'This will not expand: \\n a newline'
'Variables do not $expand $either'

Как видите, предложения 3 и 4 идентичны PHP.

Error: User Rate Limit Exceeded Anonimista

Похожие вопросы