Я заметил, что турецкие символы сохраняются по-разному, в зависимости от используемого элемента управления HTML-элемента (правильно для textarea
, неправильно для input
).
Я использую следующие символы для своего теста: ÖŞĞÜİÇ öşğüıç
Ниже приведен мой HTML-код для элементов управления input
и textarea
(ничего особенного):
<div class="col-md-12">
<div class="row defMarginBottom">
<div class="col-md-6">
<label>Mesaj Konusu</label>
<input type="text" class="form-control" placeholder="Konu"
ng-model="titleText" />
</div>
</div>
<div class="row defMarginBottom">
<div class="col-md-3">
<label>İnternet Adresi Konusu</label>
<input type="text" class="form-control"
placeholder="İnternet Adresi Konusu"
ng-model="additionalDataSubject" />
</div>
<div class="col-md-3 defMarginLeft1_3">
<label>İnternet Adresi Linki</label>
<input type="text" class="form-control"
placeholder="İnternet Adresi Linki"
ng-model="additionalDataLink" />
</div>
</div>
<div class="row defMarginBottom">
<div class="col-md-6">
<label>Mesaj</label>
<textarea class="form-control defHeight"
placeholder="Mesaj" ng-model="message">
</textarea>
</div>
</div>
<div class="row">
<input style="margin-left:1.5%;" type="button"
class="btn btn-success" value="Kaydet ve Gönder"
ng-click="saveAndSend()" />
</div>
</div>
Ниже приведен код углового контроллера, в котором определены модели ng:
var jsonObj = {
"Subject": $scope.additionalDataSubject,
"Link": $scope.additionalDataLink
};
var obj = {
"ActivityTypeIds": activityTypeIdList,
"SalesPersonID": $scope.salesPersonId,
"SalesPersons": $scope.spIdList,
"CustomerCategories": categoryIdList,
"customerName": $scope.customerName,
"StartDate": $scope.startDate,
"EndDate": $scope.endDate,
"TitleText": $scope.titleText,
"Message": $scope.message,
"AdditionalData": JSON.stringify(jsonObj)
};
При вводе тестовых строк в базу данных корректно сохраняются только те, которые для элементов управления textarea
.
Эти элементы управления input
неправильно сохранены как: ÖŞĞÜİÇ öşğüıç
Примечание. Недавно я добавил следующую новую директиву в мое приложение Angular в качестве защиты от атак XSS, и подозрительноэто вызывает проблему, но поскольку записи для textarea
сохранены правильно, я не уверен, что это связано.
.directive('input',['$sanitize', function ($sanitize) {
return {
restrict: 'E',
require: '?ngModel',
link: function (scope, element, attrs, ngModel) {
if (ngModel !== undefined && ngModel != null) {
ngModel.$parsers.push(function (value) {
return $sanitize(value);
});
}
}
};
}]);
Как я могу решить эту проблему?Большинство вопросов здесь, касающихся SO, касаются рендеринга турецких символов, а не их сохранения.