diff --git a/src/language/ASTDotPrinter.cpp b/src/language/ASTDotPrinter.cpp
index 7339d62307aa7f501ec73b2ef98dbceab2b5a51d..c01b906424e0ac0bf500e43b017b107f6a4217a5 100644
--- a/src/language/ASTDotPrinter.cpp
+++ b/src/language/ASTDotPrinter.cpp
@@ -11,7 +11,7 @@ ASTDotPrinter::_print(std::ostream& os, const ASTNode& node) const
   } else {
     if (node.has_content()) {
       os << "  x" << m_node_number_map.at(&node) << " [ label=\"" << node.name() << "\\n"
-         << node.string_view() << "\\n"
+         << escapeString(node.string_view()) << "\\n"
          << dataTypeName(node.m_data_type) << "\" ]\n";
     } else {
       os << "  x" << m_node_number_map.at(&node) << " [ label=\"" << node.name() << "\\n"
diff --git a/src/utils/EscapedString.hpp b/src/utils/EscapedString.hpp
index a89fea0277cef63923d57f4f6d18edf545ee5657..08b384abcf972a246f4f5d4acd592b40c72e9b2e 100644
--- a/src/utils/EscapedString.hpp
+++ b/src/utils/EscapedString.hpp
@@ -3,11 +3,12 @@
 
 #include <sstream>
 #include <string>
+#include <string_view>
 
 #include <PugsMacros.hpp>
 
 PUGS_INLINE std::string
-unescapeString(const std::string& input_string)
+unescapeString(const std::string_view& input_string)
 {
   std::stringstream ss;
   for (size_t i = 1; i < input_string.size() - 1; ++i) {
@@ -70,7 +71,7 @@ unescapeString(const std::string& input_string)
 }
 
 PUGS_INLINE std::string
-escapeString(const std::string& input_string)
+escapeString(const std::string_view& input_string)
 {
   std::stringstream ss;
   for (size_t i = 0; i < input_string.size(); ++i) {