0

如何获取包含大量混合双引号和单引号的字符串:

curl -A 'Curl/2.5' -d '{"key":"$api_key","message":{"html":"<p><h1>Hello World</h1><\/p>"}'

并创建一个字符串变量,例如:

$curl_command = "curl -A 'Curl/2.5' -d '{"key":"$api_key","message":{"html":"<p><h1>Hello World</h1><\/p>"}'"

不返回“意外的错误”?我想避免更改原始字符串。

4

4 回答 4

3

您可以使用 heredoc 语法并轻松转义所有引号和双引号。

这是它的语法。 http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

注意不要在 heredoc 标识符之前留出空格。

于 2013-10-17T19:02:17.933 回答
1

使用HEREDOC语法。

<?php
$api_key='xx2233';
$content=<<<EOD
curl -A 'Curl/2.5' -d '{"key":"$api_key","message":{"html":"<p><h1>Hello World</h1><\/p>"}'
EOD;

echo $curlCommand=$content;

输出 :

curl -A 'Curl/2.5' -d '{"key":"xx2233","message":{"html":" Hello World

</p>"}

于 2013-10-17T19:02:29.003 回答
1

您可以使用 Heredoc:

$string = <<<someStringYouWillAlsoNeedToStop
curl -A 'Curl/2.5' -d '{"key":"$api_key","message":{"html":"<p><h1>Hello World</h1><\/p>"}'
someStringYouWillAlsoNeedToStop; // this ends your string

请注意,heredoc 会解析您的 $variables。如果你不想这样,你应该通过在第一个 someStringYouWillNeedToStop 周围使用单引号来使用 Nowdoc:

$string = <<<'someStringYouWillAlsoNeedToStop'
curl -A 'Curl/2.5' -d '{"key":"$api_key","message":{"html":"<p><h1>Hello World</h1><\/p>"}'
someStringYouWillAlsoNeedToStop; // this ends your string
于 2013-10-17T19:03:26.680 回答
0

使用escapeshellarg函数来保证它被完全转义:

$arg = escapeshellarg('{"key":"$api_key","message":{"html":"<p><h1>Hello World</h1><\/p>"}');
$curl_command = "curl -A 'Curl/2.5' -d '.$arg;
于 2013-10-17T19:04:00.117 回答