Экранирование кавычек в PHP - PullRequest
44 голосов
/ 03 ноября 2011

Я получаю ошибку разбора и думаю, что это из-за кавычек над "time".Как я могу заставить его обрабатывать это как целую строку?

<?php
    $text1 = 'From time to "time" this submerged or latent theater in 'Hamlet'
    becomes almost overt. It is close to the surface in Hamlet's pretense of madness,
    the "antic disposition" he puts on to protect himself and prevent his antagonists
    from plucking out the heart of his mystery. It is even closer to the surface when
    Hamlet enters his mother's room and holds up, side by side, the pictures of the
    two kings, Old Hamlet and Claudius, and proceeds to describe for her the true
    nature of the choice she has made, presenting truth by means of a show.
    Similarly, when he leaps into the open grave at Ophelia's funeral, ranting in
    high heroic terms, he is acting out for Laertes, and perhaps for himself as well,
    the folly of excessive, melodramatic expressions of grief.";

    $text2 = 'From time to "time"';

    similar_text($textl, $text2, $p);
    echo "Percent: $p%";

Проблема в том, что я не могу вручную добавить \ перед каждой кавычкой.Это фактический текст, который мне нужно сравнить.

Ответы [ 6 ]

70 голосов
/ 03 ноября 2011

Используйте обратную косую черту как таковую

"From time to \"time\"";

Обратная косая черта используется в PHP для экранирования специальных символов в кавычках.Так как PHP не различает строки и символы, вы также можете использовать это

'From time to "time"';

Разница между одинарными и двойными кавычками заключается в том, что двойные кавычки допускают интерполяцию строк, что означает, что вы можете ссылаться на переменные, встроенные в строкуи их значения будут оцениваться в строке следующим образом:

$name = 'Chris';
$greeting = "Hello my name is $name"; //equals "Hello my name is Chris"

В соответствии с вашим последним редактированием вашего вопроса, я думаю, что вам проще всего сделать это, используя этот пункт - использование heredoc.Они обычно не используются, и, честно говоря, я бы не рекомендовал это, но если вы хотите быстрый способ поместить эту стену текста в одну строку.Синтаксис можно найти здесь: http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc и вот пример:

$someVar = "hello";
$someOtherVar = "goodbye";
$heredoc = <<<term
This is a long line of text that include variables such as $someVar
and additionally some other variable $someOtherVar. It also supports having
'single quotes' and "double quotes" without terminating the string itself.
heredocs have additional functionality that most likely falls outside
the scope of what you aim to accomplish.
term;
44 голосов
/ 18 октября 2013

Используйте функцию addlashes :

 $str = "Is your name O'Reilly?";

 // Outputs: Is your name O\'Reilly?
   echo addslashes($str);
4 голосов
/ 03 ноября 2011

Сохраните ваш текст не в PHP-файле, а в обычном текстовом файле, скажем, «text.txt»

Затем с помощью одной простой команды $text1 = file_get_contents('text.txt'); получите текст без единой проблемы.

2 голосов
/ 03 ноября 2011
$text1= "From time to \"time\"";

или

$text1= 'From time to "time"';
1 голос
/ 03 ноября 2011

Вы можете использовать функцию PHP добавление косой черты () к любой строке, чтобы сделать ее совместимой

1 голос
/ 03 ноября 2011

Либо избегайте цитаты:

$text1= "From time to \"time\"";

или используйте одинарные кавычки для обозначения вашей строки:

$text1= 'From time to "time"';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...