我知道還有其他方法只轉義單引號(such as this answer),但在我看來應該有一種使用htmlspecialchars()的方法。使用htmlspecialchars()僅轉義單引號(僅留雙引號)
根據手冊,它應該是它們常量的一些組合,但根據它們的解釋,我沒有看到它。
是否有可能只轉義單引號,留下雙引號,htmlspecialchars()
?
我知道還有其他方法只轉義單引號(such as this answer),但在我看來應該有一種使用htmlspecialchars()的方法。使用htmlspecialchars()僅轉義單引號(僅留雙引號)
根據手冊,它應該是它們常量的一些組合,但根據它們的解釋,我沒有看到它。
是否有可能只轉義單引號,留下雙引號,htmlspecialchars()
?
使用用htmlspecialchars(...)
然後str_replace函數(...)在雙引號
這裏就是你要找的常量的組合。
$escaped_string = htmlspecialchars($string, ENT_QUOTES & ~ENT_COMPAT, $encoding);
這將逃脫& ' < >
,而是獨自離開"
。 ENT_QUOTES & ~ENT_COMPAT
是位操縱語言,意思是「雙引號,減去雙引號」。
這是因爲這些常數是如何定義的。 php-src/ext/standard/html.h
#define ENT_HTML_QUOTE_NONE 0
#define ENT_HTML_QUOTE_SINGLE 1
#define ENT_HTML_QUOTE_DOUBLE 2
#define ENT_COMPAT ENT_HTML_QUOTE_DOUBLE
#define ENT_QUOTES (ENT_HTML_QUOTE_DOUBLE | ENT_HTML_QUOTE_SINGLE)
#define ENT_NOQUOTES ENT_HTML_QUOTE_NONE
爲什麼你想逃避單引號,但沒有雙引號?那麼,你可以避免雙引號的原因,但不是單引號:因爲你有一個字符串有很多的"
雙引號和只有幾個'
單引號,所以你想要堅持它在一個'
-defined字符串。
一個例子:
<div data-myobject='<?= htmlspecialchars(json_encode($myobject), ENT_QUOTES & ~ENT_COMPAT, 'UTF-8') ?>'
json_encode()
產生大量的雙引號的,所以是有意義的堅持在一個單引號分隔屬性的結果,並保留雙引號轉義。
爲什麼你需要這個?這對我來說似乎是個問題。 – Halcyon
如果它只是單引號,然後使用str_replace –
[This](http://www.php.net/manual/en/function.htmlspecialchars.php#99185)可能有幫助 –